Option Infer (istruzione)

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

Sintassi

Option Infer { On | Off }

Parti

Termine Definizione
On Facoltativo. Abilita l'inferenza del tipo di variabile locale.
Off Facoltativo. Disabilita l'inferenza del tipo di variabile locale.

Osservazioni:

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 espressione di inizializzazione.

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

Lo screenshot seguente mostra IntelliSense quando Option Infer è attivo:

Screenshot showing IntelliSense view when Option Infer is on.

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 è impostata su Disattivato nella pagina di compilazione, Creazione progetti (Visual Basic).

Lo screenshot seguente mostra IntelliSense quando Option Infer è disattivato:

Screenshot showing IntelliSense view when Option Infer is off.

Nota

Quando una variabile viene dichiarata come Object, il tipo di runtime può essere modificato mentre il programma è in esecuzione. Visual Basic esegue operazioni denominate conversione boxing e conversione unboxing per eseguire la conversione tra un Object e un tipo valore, il che rende l'esecuzione più lenta. Per informazioni sulla conversione boxing e unboxing, vedere la 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 altre informazioni, vedere Inferenza del tipo di variabile locale.

Quando non è presente un'istruzione Option Infer

Se il codice sorgente non contiene un'istruzione Option Infer, viene utilizzata l'impostazione Option Infer nella pagina Compilazione, Creazione progetti (Visual Basic). Se si usa il compilatore della riga di comando, viene usata l'opzione del compilatore -optioninfer.

Per impostare Option Infer nell'IDE

  1. Selezionare un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto.

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

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.
No Dim qty As Integer La variabile viene inizializzata sul valore predefinito per il tipo di dati. Per altre informazioni, vedere Istruzione Dim.
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 1

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

Esempio 2

L'esempio seguente dimostra 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

Vedi anche