Condividi tramite


Istruzione Option Infer

Abilita l'utilizzo dell'inferenza del tipo di variabile locale nelle variabili dichiaranti.

Option Infer { On | Off }

Parti

Argomento

Definizione

On

Facoltativo. Attiva l'ìnferenza dei tipi locali

Off

Facoltativo. Disabilita l'ìnferenza dei tipi locali

Note

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

Quando si imposta Option Infer su On, è possibile dichiarare variabili locali senza dichiarare in modo esplicito un tipo di dati. Tramite l'inferenza, il compilatore deriva il tipo di dati di una variabile dal tipo della relativa espressioni di inizializzazione.

Nella figura seguente, l'istruzione Option Infer è abilitata. La variabile nella dichiarazione Dim someVar = 2 viene dichiarata come intero in base all'inferenza del tipo.

IntelliSense quando Option Infer è attivato

Visualizzazione IntelliSense della dichiarazione

Nella figura seguente, l'istruzione Option Infer è disabilitata. La variabile nella dichiarazione Dim someVar = 2 viene dichiarata come Object in base all'inferenza del tipo. In questo esempio, l'impostazione Option Strict viene impostata su Off nella Pagina Compilazione, Progettazione progetti (Visual Basic).

IntelliSense quando Option Infer è disabilitato

Visualizzazione IntelliSense della dichiarazione

Quando una variabile viene dichiarata come Object, il tipo di runtime può essere modificato mentre il programma è in esecuzione. In Visual Basic vengono eseguite operazioni denominate conversione boxing e conversione unboxing, che consentono la conversione tra un Object e un tipo di valore. Queste operazioni rendono più lenta l'esecuzione. Per informazioni sulle conversioni boxing e unboxing, vedere Specifica del linguaggio Visual Basic.

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.

Per ulteriori informazioni, vedereInferenza del tipo di variabile locale (Visual Basic).

Quando non è presente un'istruzione Option Infer

Se nel codice sorgente non è presente un'istruzione Option Infer, si utilizza l'impostazione Option Infer disponibile in Pagina Compilazione, Progettazione progetti (Visual Basic). Se si utilizza il compilatore della riga di comando, viene utilizzata l'opzione del compilatore /optioninfer.

Per impostare Option Infer nell'IDE

  1. Selezionare un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto. Per ulteriori informazioni, vedere Introduzione a Progettazione progetti.

  2. Fare clic sulla scheda Compila.

  3. Impostare il valore nella casella Option infer.

Quando si crea un nuovo progetto, l'impostazione Option Infer nella scheda Compila viene definita in base all'impostazione Option Infer nella finestra di dialogo Impostazioni predefinite di Visual Basic. Per accedere alla finestra di dialogo Impostazioni predefinite di Visual Basic, scegliere Opzioni dal menu Strumenti. Nella finestra di dialogo Opzioni espandere Progetti e soluzioni, quindi fare clic su Impostazioni predefinite di Visual Basic. L'impostazione predefinita iniziale in Impostazioni predefinite di Visual Basic è On.

Per impostare Option Infer nella riga di comando

  • Includere l'opzione del compilatore /optioninfer nel comando vbc.

Tipi di dati e valori predefiniti

Nella tabella seguente vengono descritti i risultati di varie combinazioni della specifica del tipo di dati e dell'inizializzatore in un'istruzione Dim.

Tipo di dati specificato?

Inizializzatore specificato?

Esempio

Risultato

No

No

Dim qty

Se Option Strict è disabilitato (impostazione predefinita), la variabile è impostata su Nothing.

Se Option Strict è abilitato, si verifica un errore in fase di compilazione.

No

Sì

Dim qty = 5

Se Option Infer è abilitato (impostazione predefinita), alla variabile viene assegnato il tipo di dati dell'inizializzatore. Vedere Inferenza del tipo di variabile locale (Visual Basic).

Se le istruzioni Option Infer e Option Strict sono disabilitate, il tipo di dati accettato dalla variabile è Object.

Se Option Infer è disabilitato e Option Strict è abilitato, si verifica un errore in fase di compilazione.

Sì

No

Dim qty As Integer

La variabile viene inizializzata sul valore predefinito per il tipo di dati. Per ulteriori informazioni, vedere Istruzione Dim (Visual Basic).

Sì

Sì

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.

Esempio

Negli esempi seguenti viene illustrato come l'istruzione Option Infer permette di utilizzare inferenza dei tipi locali.

' 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

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

Riferimenti

Istruzione Dim (Visual Basic)

Istruzione Option Compare

Istruzione Option Explicit (Visual Basic)

Istruzione Option Strict

Impostazioni predefinite di Visual Basic, Progetti, finestra di dialogo Opzioni

/optioninfer

Concetti

Inferenza del tipo di variabile locale (Visual Basic)

Cronologia delle modifiche

Data

Cronologia

Motivo

Aprile 2011

Aggiunte informazioni sul tipo Object e sull'inferenza del tipo.

Miglioramento delle informazioni.

Marzo 2011

Le note sono state modificate ed è stato aggiunto un esempio.

Miglioramento delle informazioni.