Instruction Option InferOption Infer Statement

Permet l'utilisation de l'inférence de type de variable locale dans les variables déclaratives.Enables the use of local type inference in declaring variables.

SyntaxeSyntax

Option Infer { On | Off }  

ComposantsParts

TermeTerm DéfinitionDefinition
On Facultatif.Optional. Active l'inférence de type de variable locale.Enables local type inference.
Off Facultatif.Optional. Désactive l'inférence de type de variable locale.Disables local type inference.

NotesRemarks

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.To set Option Infer in a file, type Option Infer On or Option Infer Off at the top of the file, before any other source code. 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.If the value set for Option Infer in a file conflicts with the value set in the IDE or on the command line, the value in the file has precedence.

Quand vous affectez à Option Infer la valeur On, vous pouvez déclarer des variables locales sans déclarer explicitement un type de données.When you set Option Infer to On, you can declare local variables without explicitly stating a data type. Le compilateur déduit le type de données d'une variable à partir du type de son expression d'initialisation.The compiler infers the data type of a variable from the type of its initialization expression.

Dans l'illustration suivante, Option Infer est activé.In the following illustration, Option Infer is turned on. La variable contenue dans la déclaration Dim someVar = 2 est déclarée en tant qu'entier par l'inférence de type.The variable in the declaration Dim someVar = 2 is declared as an integer by type inference.

Vue IntelliSense de la déclaration. IntelliSense view of the declaration.
IntelliSense quand Option Infer est activéIntelliSense when Option Infer is on

Dans l'illustration suivante, Option Infer est désactivé.In the following illustration, Option Infer is turned off. La variable contenue dans la déclaration Dim someVar = 2 est déclarée comme Object par l'inférence de type.The variable in the declaration Dim someVar = 2 is declared as an Object by type inference. Dans cet exemple, le Option Strict est défini sur hors sur la Page Compiler, Concepteur de projets (Visual Basic).In this example, the Option Strict setting is set to Off on the Compile Page, Project Designer (Visual Basic).

Vue IntelliSense de la déclaration. IntelliSense view of the declaration.
IntelliSense quand Option Infer est désactivéIntelliSense when Option Infer is off

Note

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.When a variable is declared as an Object, the run-time type can change while the program is running. Visual BasicVisual Basicexécute 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. performs operations called boxing and unboxing to convert between an Object and a value type, which makes execution slower. Pour plus d’informations sur les conversions boxing et unboxing, consultez le spécification du langage Visual Basic.For information about boxing and unboxing, see the Visual Basic Language Specification.

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.Type inference applies at the procedure level, and does not apply outside a procedure in a class, structure, module, or interface.

Pour plus d’informations, consultez l’inférence de Type Local.For additional information, see Local Type Inference.

En l'absence d'instruction Option InferWhen an Option Infer Statement Is Not Present

Si le code source ne contient pas un Option Infer instruction, le Option Infer définition sur le Page Compiler, Concepteur de projets (Visual Basic) est utilisé.If the source code does not contain an Option Infer statement, the Option Infer setting on the Compile Page, Project Designer (Visual Basic) is used. Si le compilateur de ligne de commande est utilisé, le /optioninfer option du compilateur est utilisée.If the command-line compiler is used, the /optioninfer compiler option is used.

Pour définir Option Infer dans l'IDETo set Option Infer in the IDE

  1. Dans l’Explorateur de solutions, sélectionnez un projet.In Solution Explorer, select a project. Dans le menu Projet, cliquez sur Propriétés.On the Project menu, click Properties.

  2. Cliquez sur l’onglet Compiler.Click the Compile tab.

  3. Définissez la valeur de la Option infer boîte.Set the value in the Option infer box.

Lorsque vous créez un nouveau projet, le Option Infer définition sur le compiler onglet est définie sur le Option Infer définition dans le valeurs par défaut VB boîte de dialogue.When you create a new project, the Option Infer setting on the Compile tab is set to the Option Infer setting in the VB Defaults dialog box. Pour accéder à la valeurs par défaut VB boîte de dialogue le outils menu, cliquez sur Options.To access the VB Defaults dialog box, on the Tools menu, click Options. Dans la boîte de dialogue Options, développez Projets et solutions, puis cliquez sur Valeurs par défaut VB.In the Options dialog box, expand Projects and Solutions, and then click VB Defaults. Le paramètre par défaut initial dans valeurs par défaut VB est On.The initial default setting in VB Defaults is On.

Pour définir Option Infer sur la ligne de commandeTo set Option Infer on the command line

  • Inclure le /optioninfer option du compilateur dans le vbc commande.Include the /optioninfer compiler option in the vbc command.

Types de données et valeurs par défautDefault Data Types and Values

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.The following table describes the results of various combinations of specifying the data type and initializer in a Dim statement.

Type de données spécifié ?Data type specified? Initialiseur spécifié ?Initializer specified? ExempleExample RésultatResult
NonNo NonNo Dim qty Si Option Strict est désactivé (par défaut), la valeur affectée à la variable est Nothing.If Option Strict is off (the default), the variable is set to Nothing.

Si Option Strict est activé, une erreur se produit au moment de la compilation.If Option Strict is on, a compile-time error occurs.
NonNo OuiYes Dim qty = 5 Si Option Infer est activée (par défaut), la variable prend le type de données de l'initialiseur.If Option Infer is on (the default), the variable takes the data type of the initializer. Consultez l’inférence de Type Local.See Local Type Inference.

Si Option Infer est désactivé et que Option Strict est désactivé, la variable prend le type de données de Object.If Option Infer is off and Option Strict is off, the variable takes the data type of Object.

Si Option Infer est désactivé et que Option Strict est activé, une erreur se produit au moment de la compilation.If Option Infer is off and Option Strict is on, a compile-time error occurs.
OuiYes NonNo Dim qty As Integer La variable est initialisée avec la valeur par défaut du type de données.The variable is initialized to the default value for the data type. Pour plus d’informations, consultez instruction Dim.For more information, see Dim Statement.
OuiYes OuiYes 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.If the data type of the initializer is not convertible to the specified data type, a compile-time error occurs.

ExempleExample

Les exemples suivants montrent comment l'instruction Option Infer active l'inférence de type de variable locale.The following examples demonstrate how the Option Infer statement enables local type inference.

' 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

ExempleExample

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.The following example demonstrates that the run-time type can differ when a variable is identified as an 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 aussiSee Also

Dim (instruction)Dim Statement
Inférence de type localLocal Type Inference
Option Compare (instruction)Option Compare Statement
Option Explicit (instruction)Option Explicit Statement
Option Strict (instruction)Option Strict Statement
Valeurs par défaut Visual Basic, Projets, boîte de dialogue OptionsVisual Basic Defaults, Projects, Options Dialog Box
/optioninfer/optioninfer
Conversion boxing et unboxingBoxing and Unboxing