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 :

Screenshot showing IntelliSense view when Option Infer is on.

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 :

Screenshot showing IntelliSense view when Option Infer is off.

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

  1. Dans l’Explorateur de solutions, sélectionnez un projet. Dans le menu Projet , cliquez sur Propriétés.

  2. Cliquez sur l’onglet Compiler.

  3. 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

Voir aussi