Instruction Option Infer
Permet l'utilisation de l'inférence de type de variable locale dans les variables déclaratives.
Syntaxe
Option Infer { On | Off }
Éléments
Terme | Définition |
---|---|
On |
Optionnel. Active l'inférence de type de variable locale. |
Off |
Optionnel. Désactive l'inférence de type de variable locale. |
Notes
Pour définir Option Infer
dans un fichier, tapez Option Infer On
ou Option Infer Off
en haut du fichier, avant tout autre code source. Si la valeur définie pour Option Infer
dans un fichier est en conflit avec la valeur définie dans l'IDE ou sur la ligne de commande, la valeur contenue dans le fichier est prioritaire.
Quand vous affectez à Option Infer
la valeur On
, vous pouvez déclarer des variables locales sans déclarer explicitement un type de données. Le compilateur déduit le type de données d'une variable à partir du type de son expression d'initialisation.
Dans l'illustration suivante, Option Infer
est activé. La variable contenue dans la déclaration Dim someVar = 2
est déclarée en tant qu'entier par l'inférence de type.
La capture d’écran suivante montre IntelliSense quand Option Infer est activée :
Dans l'illustration suivante, Option Infer
est désactivé. La variable contenue dans la déclaration Dim someVar = 2
est déclarée comme Object
par l'inférence de type. Dans cet exemple, le paramètre Option Strict est défini sur Désactivé sur la Page compiler, Concepteur de projets (Visual Basic).
La capture d’écran suivante montre IntelliSense lorsque l’inférence d’option est désactivée :
Remarque
Quand une variable est déclarée comme Object
, le type au moment de l'exécution peut changer pendant que le programme s'exécute. Visual Basic effectue des opérations appelées boxing et unboxing pour effectuer une conversion entre un Object
et un type valeur, ce qui ralentit l’exécution. Pour plus d’informations sur le boxing et la conversion unboxing, consultez la spécification du langage Visual Basic.
L'inférence de type s'applique au niveau de la procédure, mais pas à l'extérieur d'une procédure de classe, de structure, de module ou d'interface.
Pour plus d’informations, consultez Inférence de type local.
En l'absence d'instruction Option Infer
Si le code source ne contient pas d’instruction Option Infer
, le paramètre Option Infer sur la Page de compilation, Concepteur de projets (Visual Basic) est utilisé. Si le compilateur de ligne de commande est utilisé, l’option du compilateur -optioninfer est utilisée.
Pour définir Option Infer dans l'IDE
Dans l’Explorateur de solutions, sélectionnez un projet. Dans le menu Projet , cliquez sur Propriétés.
Cliquez sur l’onglet Compiler.
Définissez la valeur dans la zone Option infer.
Lorsque vous créez un projet, le paramètre Option Inférer sous l’onglet Compiler est défini sur le paramètre d' option Infer de dans la boîte de dialogue Valeurs par défaut VB. Pour accéder à la boîte de dialogue Valeurs par défaut VB, dans le menu Outils, cliquez sur Options. Dans la boîte de dialogue Options, développez Projets et solutions, puis cliquez sur Valeurs par défaut VB. La définition par défaut initiale de Valeurs par défaut VB est On
.
Pour définir Option Infer sur la ligne de commande
Incluez l’option du compilateur -optioninfer dans la commande vbc.
Types de données et valeurs par défaut
Le tableau suivant décrit les résultats des diverses combinaisons de spécification du type de données et d'un initialiseur dans une instruction Dim
.
Type de données spécifié ? | Initialiseur spécifié ? | Exemple | Résultats |
---|---|---|---|
Non | Non | Dim qty |
Si Option Strict est désactivé (par défaut), la valeur affectée à la variable est Nothing .Si Option Strict est activé, une erreur se produit au moment de la compilation. |
Non | Oui | Dim qty = 5 |
Si Option Infer est activée (par défaut), la variable prend le type de données de l'initialiseur. Consultez Inférence de type de variable locale.Si Option Infer est désactivé et que Option Strict est désactivé, la variable prend le type de données de Object .Si Option Infer est désactivé et que Option Strict est activé, une erreur se produit au moment de la compilation. |
Oui | Non | Dim qty As Integer |
La variable est initialisée avec la valeur par défaut du type de données. Pour plus d’informations, consultez Instruction Dim. |
Oui | Oui | Dim qty As Integer = 5 |
Si le type de données de l’initialiseur ne peut pas être converti dans le type de données spécifié, une erreur se produit au moment de la compilation. |
Exemple 1
Les exemples suivants montrent comment l'instruction Option Infer
active l'inférence de type de variable locale.
' Enable Option Infer before trying these examples.
' Variable num is an Integer.
Dim num = 5
' Variable dbl is a Double.
Dim dbl = 4.113
' Variable str is a String.
Dim str = "abc"
' Variable pList is an array of Process objects.
Dim pList = Process.GetProcesses()
' Variable i is an Integer.
For i = 1 To 10
Console.WriteLine(i)
Next
' Variable item is a string.
Dim lst As New List(Of String) From {"abc", "def", "ghi"}
For Each item In lst
Console.WriteLine(item)
Next
' Variable namedCust is an instance of the Customer class.
Dim namedCust = New Customer With {.Name = "Blue Yonder Airlines",
.City = "Snoqualmie"}
' Variable product is an instance of an anonymous type.
Dim product = New With {Key .Name = "paperclips", .Price = 1.29}
' If customers is a collection of Customer objects in the following
' query, the inferred type of cust is Customer, and the inferred type
' of custs is IEnumerable(Of Customer).
Dim custs = From cust In customers
Where cust.City = "Seattle"
Select cust.Name, cust.ID
Exemple 2
L'exemple suivant montre que le type au moment de l'exécution peut être différent quand une variable est identifiée comme Object
.
' Disable Option Infer when trying this example.
Dim someVar = 5
Console.WriteLine(someVar.GetType.ToString)
' If Option Infer is instead enabled, the following
' statement causes a run-time error. This is because
' someVar was implicitly defined as an integer.
someVar = "abc"
Console.WriteLine(someVar.GetType.ToString)
' Output:
' System.Int32
' System.String