Option Infer (istruzione)Option Infer Statement

Abilita l'uso dell'inferenza del tipo di variabile locale nelle variabili dichiaranti.Enables the use of local type inference in declaring variables.

SintassiSyntax

Option Infer { On | Off }  

PartiParts

TermineTerm DefinizioneDefinition
On Facoltativo.Optional. Abilita l'inferenza del tipo di variabile locale.Enables local type inference.
Off Facoltativo.Optional. Disabilita l'inferenza del tipo di variabile locale.Disables local type inference.

NoteRemarks

Per impostare Option Infer in un file, digitare Option Infer On oppure Option Infer Off all'inizio del file, prima di qualsiasi altro codice sorgente.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. Se il valore impostato per Option Infer in un file è in conflitto con il valore impostato nell'IDE o sulla riga di comando, il valore nel file ha precedenza.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.

Quando si imposta Option Infer su On, è possibile dichiarare variabili locali senza dichiarare in modo esplicito un tipo di dati.When you set Option Infer to On, you can declare local variables without explicitly stating a data type. Tramite l'inferenza, il compilatore deriva il tipo di dati di una variabile dal tipo della relativa espressione di inizializzazione.The compiler infers the data type of a variable from the type of its initialization expression.

Nella figura seguente, l'istruzione Option Infer è abilitata.In the following illustration, Option Infer is turned on. La variabile nella dichiarazione Dim someVar = 2 viene dichiarata come Integer in base all'inferenza del tipo.The variable in the declaration Dim someVar = 2 is declared as an integer by type inference.

Lo screenshot seguente mostra IntelliSense quando Option Infer è attivato:The following screenshot shows IntelliSense when Option Infer is on:

Screenshot della visualizzazione di IntelliSense quando Option Infer è attivato.

Nella figura seguente, l'istruzione Option Infer è disabilitata.In the following illustration, Option Infer is turned off. La variabile nella dichiarazione Dim someVar = 2 viene dichiarata come Object in base all'inferenza del tipo.The variable in the declaration Dim someVar = 2 is declared as an Object by type inference. In questo esempio, il Option Strict è impostato su Off sul pagina compilazione, creazione progetti (Visual Basic).In this example, the Option Strict setting is set to Off on the Compile Page, Project Designer (Visual Basic).

Lo screenshot seguente mostra IntelliSense quando Option Infer è disabilitato:The following screenshot shows IntelliSense when Option Infer is off:

Screenshot della visualizzazione di IntelliSense quando Option Infer è disabilitato.

Nota

Quando una variabile viene dichiarata come Object, il tipo di runtime può essere modificato mentre il programma è in esecuzione.When a variable is declared as an Object, the run-time type can change while the program is running. Visual Basic esegue operazioni chiamate boxing e unboxing per la conversione tra un Object e un tipo valore, che rende l'esecuzione più lenta.Visual Basic performs operations called boxing and unboxing to convert between an Object and a value type, which makes execution slower. Per informazioni sulle conversioni boxing e unboxing, vedere la specifiche del linguaggio Visual Basic.For information about boxing and unboxing, see the Visual Basic Language Specification.

L'inferenza del tipo si applica a livello di routine e non si applica all'esterno di una routine in una classe, una struttura, un modulo o un'interfaccia.Type inference applies at the procedure level, and does not apply outside a procedure in a class, structure, module, or interface.

Per altre informazioni, vedere Local Type Inference.For additional information, see Local Type Inference.

Quando non è presente un'istruzione Option InferWhen an Option Infer Statement Is Not Present

Se il codice sorgente non contiene un Option Infer istruzione, il Option Infer impostazione il pagina compilazione, creazione progetti (Visual Basic) viene usato.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. Se viene utilizzato il compilatore della riga di comando, il /optioninfer viene utilizzata l'opzione del compilatore.If the command-line compiler is used, the /optioninfer compiler option is used.

Per impostare Option Infer nell'IDETo set Option Infer in the IDE

  1. Selezionare un progetto in Esplora soluzioni.In Solution Explorer, select a project. Scegliere Proprietà dal menu Progetto.On the Project menu, click Properties.

  2. Fare clic sulla scheda Compila.Click the Compile tab.

  3. Impostare il valore di Option infer casella.Set the value in the Option infer box.

Quando si crea un nuovo progetto, il Option Infer impostazione nel compilare scheda è impostata sul Option Infer impostazione nel valore predefinito è VB finestra di dialogo.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. Per l'accesso di valore predefinito è VB finestra di dialogo il strumenti dal menu fare clic su opzioni.To access the VB Defaults dialog box, on the Tools menu, click Options. Nella finestra di dialogo Opzioni espandere Progetti e soluzioni, quindi fare clic su Impostazioni predefinite di Visual Basic.In the Options dialog box, expand Projects and Solutions, and then click VB Defaults. L'impostazione predefinita iniziale in le impostazioni predefinite di Visual Basic è On.The initial default setting in VB Defaults is On.

Per impostare Option Infer nella riga di comandoTo set Option Infer on the command line

  • Includere il /optioninfer opzione del compilatore nella vbc comando.Include the /optioninfer compiler option in the vbc command.

Tipi di dati e valori predefinitiDefault Data Types and Values

Nella tabella seguente vengono descritti i risultati di varie combinazioni della specifica del tipo di dati e dell'inizializzatore in un'istruzione Dim.The following table describes the results of various combinations of specifying the data type and initializer in a Dim statement.

Tipo di dati specificato?Data type specified? Inizializzatore specificato?Initializer specified? EsempioExample RisultatoResult
NoNo NoNo Dim qty Se Option Strict è disabilitato (impostazione predefinita), la variabile è impostata su Nothing.If Option Strict is off (the default), the variable is set to Nothing.

Se Option Strict è abilitato, si verifica un errore in fase di compilazione.If Option Strict is on, a compile-time error occurs.
NoNo YesYes Dim qty = 5 Se Option Infer è abilitato (impostazione predefinita), alla variabile viene assegnato il tipo di dati dell'inizializzatore.If Option Infer is on (the default), the variable takes the data type of the initializer. Visualizzare inferenza del tipo locale.See Local Type Inference.

Se le istruzioni Option Infer e Option Strict sono disabilitate, il tipo di dati accettato dalla variabile è Object.If Option Infer is off and Option Strict is off, the variable takes the data type of Object.

Se Option Infer è disabilitato e Option Strict è abilitato, si verifica un errore in fase di compilazione.If Option Infer is off and Option Strict is on, a compile-time error occurs.
YesYes NoNo Dim qty As Integer La variabile viene inizializzata sul valore predefinito per il tipo di dati.The variable is initialized to the default value for the data type. Per altre informazioni, vedere istruzione Dim.For more information, see Dim Statement.
YesYes YesYes Dim qty As Integer = 5 Se il tipo di dati dell'inizializzatore non è convertibile nel tipo di dati specificato, si verifica un errore in fase di compilazione.If the data type of the initializer is not convertible to the specified data type, a compile-time error occurs.

EsempioExample

Gli esempi seguenti illustrano come l'istruzione Option Infer permette di usare inferenza del tipo di variabile 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

EsempioExample

L'esempio seguente dimostra che il tipo di runtime può differire quando una variabile viene identificata come 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

Vedere ancheSee also