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é
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é
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
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.
Cliquez sur l'onglet Compiler.
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 Explicit, instruction (Visual Basic)
Valeurs par défaut VB, Projets, boîte de dialogue Options
Boxing et unboxing (Guide de programmation C#)