Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Abilita l'uso dell'inferenza del tipo locale nella dichiarazione di variabili.
Sintassi
Option Infer { On | Off }
Parti
| Termine | Definizione |
|---|---|
On |
Opzionale. Abilita l'inferenza del tipo locale. |
Off |
Opzionale. Disabilita l'inferenza del tipo locale. |
Osservazioni:
Per impostare Option Infer in un file, digitare Option Infer On o Option Infer Off nella parte superiore 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 nella riga di comando, il valore nel file ha la precedenza.
Quando si imposta su Option InferOn, è possibile dichiarare variabili locali senza indicare in modo esplicito un tipo di dati. Il compilatore deduce il tipo di dati di una variabile dal tipo dell'espressione di inizializzazione.
Nella figura Option Infer seguente viene attivato. 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:
Nella figura Option Infer seguente viene disattivato. La variabile nella dichiarazione Dim someVar = 2 viene dichiarata come un'inferenza Object del tipo. In questo esempio, l'impostazione Option Strict è impostata su Disattivato nella pagina di compilazione, Progettazione progetti (Visual Basic).
Lo screenshot seguente mostra IntelliSense quando Option Infer è disattivato:
Annotazioni
Quando una variabile viene dichiarata come Object, il tipo di runtime può cambiare durante l'esecuzione del programma. Visual Basic esegue operazioni denominate boxing e unboxing per eseguire la conversione tra un Object tipo e un valore, 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 locale.
Quando non è presente un'istruzione option infer
Se il codice sorgente non contiene un'istruzioneOption Infer, viene utilizzata l'impostazione Option Infer nella pagina Compilazione. Se viene usato il compilatore della riga di comando, viene usata l'opzione del compilatore -optioninfer .
Per impostare Option Infer nell'IDE
In Esplora soluzioni selezionare un progetto. Scegliere Proprietà dal menu Progetto.
Fare clic sulla scheda Compilazione.
Impostare il valore nella casella Di inferenza opzione .
Quando si crea un nuovo progetto, l'impostazione Option Infer nella scheda Compila è impostata sull'impostazione Opzione Inferenza nella finestra di dialogo Impostazioni predefinite VB. Per accedere alla finestra di dialogo Impostazioni predefinite VB, scegliere Opzioni dal menu Strumenti. Nella finestra di dialogo Opzioni espandere Progetti e soluzioni, quindi fare clic su Impostazioni predefinite VB. L'impostazione predefinita iniziale in Vb Defaults è 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 di specificare il tipo di dati e l'inizializzatore in un'istruzione Dim .
| Tipo di dati specificato? | Inizializzatore specificato? | Esempio | Risultato |
|---|---|---|---|
| NO | NO | Dim qty |
Se Option Strict è disattivato (impostazione predefinita), la variabile viene impostata su Nothing.Se Option Strict è attivato, si verifica un errore in fase di compilazione. |
| NO | Sì | Dim qty = 5 |
Se Option Infer è attivato (impostazione predefinita), la variabile accetta il tipo di dati dell'inizializzatore. Vedere Inferenza del tipo locale.Se Option Infer è disattivato e Option Strict è disattivato, la variabile accetta il tipo di dati di Object.Se Option Infer è disattivato ed Option Strict è attivo, 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 altre informazioni, vedere Istruzione Dim. |
| 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 1
Negli esempi seguenti viene illustrato come l'istruzione abilita l'inferenza Option Infer del tipo 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
Nell'esempio seguente viene illustrato che il tipo di runtime può essere diverso 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