Partager via


Instruction Option Infer

Permet l'utilisation de l'inférence de type de variable locale dans les variables déclaratives.

Option Infer { On | Off }

Composants

Terme

Définition

On

Facultatif. Active l'inférence de type de variable locale.

Off

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

IntelliSense quand Option Infer est activé

Vue IntelliSense de la déclaration.

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 a la valeur Off dans la Page Compiler, Concepteur de projets (Visual Basic).

IntelliSense quand Option Infer est désactivé

Vue IntelliSense de la déclaration.

Notes

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 procéder à des conversions entre un Object et un type de valeur, ce qui ralentit l'exécution.Pour plus d'informations sur les opérations boxing et unboxing, consultez 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 (Visual Basic).

En l'absence d'instruction Option Infer

Si le code source ne contient pas d'instruction Option Infer, la définition du paramètre Option Infer de la Page Compiler, Concepteur de projets (Visual Basic) est utilisée. Si le compilateur de ligne de commande est utilisé, l'option de 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. Pour plus d'informations, consultez Introduction to the Project Designer.

  2. Cliquez sur l'onglet Compiler.

  3. Définissez la valeur dans la zone Option infer.

Quand vous créez un projet, le paramètre Option Infer de l'onglet Compiler reprend la définition du paramètre Option Infer de 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 de 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ésultat

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 local (Visual Basic).

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 Dim, instruction (Visual Basic).

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

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

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

Référence

Dim, instruction (Visual Basic)

Option Compare, instruction

Option Explicit, instruction (Visual Basic)

Option Strict, instruction

Valeurs par défaut VB, Projets, boîte de dialogue Options

/optioninfer

Boxing et unboxing (Guide de programmation C#)

Concepts

Inférence de type local (Visual Basic)