Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Active l’utilisation de l’inférence de type local dans la déclaration de variables.
Syntaxe
Option Infer { On | Off }
Pièces
Terme | Définition |
---|---|
On |
Optionnel. Active l’inférence de type local. |
Off |
Optionnel. Désactive l’inférence de type local. |
Remarques
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 Option Infer
dans un fichier est en conflit avec la valeur définie dans l’IDE ou sur la ligne de commande, la valeur du fichier est prioritaire.
Lorsque vous définissez Option Infer
On
sur , vous pouvez déclarer des variables locales sans indiquer 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ée. La variable de la déclaration Dim someVar = 2
est déclarée en tant qu’entier par 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ée. La variable dans la déclaration Dim someVar = 2
est déclarée en tant qu’inférence Object
de type. Dans cet exemple, le paramètre Option Strict est défini sur Désactivé sur la page compiler, le Concepteur de projets (Visual Basic) .
La capture d’écran suivante montre IntelliSense lorsque l’inférence d’option est désactivée :
Remarque
Lorsqu’une variable est déclarée en tant que Object
type d’exécution, le type d’exécution peut changer pendant l’exécution du programme. Visual Basic effectue des opérations appelées boxing et unboxing pour effectuer une conversion entre un Object
type valeur et un type valeur, ce qui ralentit l’exécution. Pour plus d’informations sur la boxe et le déboxing, consultez la spécification du langage Visual Basic.
L’inférence de type s’applique au niveau de la procédure et ne s’applique pas en dehors d’une procédure dans une classe, une structure, un module ou une interface.
Pour plus d’informations, consultez l’inférence de type local.
Lorsqu’une instruction d’inférence d’option n’est pas présente
Si le code source ne contient pas d’instruction Option Infer
, le paramètre Option Infer sur la page de compilation, le 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 l’option Infer dans l’IDE
Dans 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 Inférence d’option .
Lorsque vous créez un projet, le paramètre d’inférence d’option sous l’onglet Compilation est défini sur le paramètre Inférence d’option dans la boîte de dialogue Valeurs par défaut vb . Pour accéder à la boîte de dialogue Vb Defaults , dans le menu Outils , cliquez sur Options. Dans la boîte de dialogue Options , développez Projets et solutions, puis cliquez sur Vb Defaults. Le paramètre par défaut initial dans VB Defaults est On
.
Pour définir l’inférence d’option sur la ligne de commande
Incluez l’option du compilateur -optioninfer dans la commande vbc .
Types et valeurs de données par défaut
Le tableau suivant décrit les résultats de différentes combinaisons de spécification du type de données et de l’initialiseur dans une Dim
instruction.
Type de données spécifié ? | Initialiseur spécifié ? | Exemple : | Résultat |
---|---|---|---|
Non | Non | Dim qty |
Si Option Strict elle est désactivée (valeur par défaut), la variable est définie sur Nothing .Si Option Strict elle est activée, une erreur au moment de la compilation se produit. |
Non | Oui | Dim qty = 5 |
Si Option Infer elle est activée (valeur par défaut), la variable accepte le type de données de l’initialiseur. Consultez l’inférence de type local.Si Option Infer elle est désactivée et Option Strict désactivée, la variable prend le type de données de Object .Si Option Infer elle est désactivée et Option Strict est activée, une erreur au moment de la compilation se produit. |
Oui | Non | Dim qty As Integer |
La variable est initialisée à la valeur par défaut pour le type de données. Pour plus d’informations, consultez L’instruction Dim. |
Oui | Oui | Dim qty As Integer = 5 |
Si le type de données de l’initialiseur n’est pas convertible en type de données spécifié, une erreur au moment de la compilation se produit. |
Exemple 1
Les exemples suivants montrent comment l’instruction Option Infer
active l’inférence de type local.
' 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 d’exécution peut différer lorsqu’une variable est identifiée comme un 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