Instructie Option Infer
Hiermee schakelt u het gebruik van deductie van het lokale type in bij het declareren van variabelen.
Syntaxis
Option Infer { On | Off }
generator
Term | Definitie |
---|---|
On |
Optioneel. Hiermee schakelt u deductie van het lokale type in. |
Off |
Optioneel. Hiermee schakelt u deductie van het lokale type uit. |
Opmerkingen
Als u een bestand wilt instellen Option Infer
, typt Option Infer On
of Option Infer Off
boven aan het bestand, vóór een andere broncode. Als de waarde die in een bestand is ingesteld Option Infer
, conflicteert met de waarde die is ingesteld in de IDE of op de opdrachtregel, heeft de waarde in het bestand voorrang.
Wanneer u dit instelt Option Infer
On
, kunt u lokale variabelen declareren zonder expliciet een gegevenstype op te geven. De compiler bepaalt het gegevenstype van een variabele van het type initialisatie-expressie.
In de volgende afbeelding Option Infer
is ingeschakeld. De variabele in de declaratie Dim someVar = 2
wordt gedeclareerd als een geheel getal per type deductie.
In de volgende schermopname ziet u IntelliSense wanneer Option Infer is ingeschakeld:
In de volgende afbeelding Option Infer
is uitgeschakeld. De variabele in de declaratie Dim someVar = 2
wordt gedeclareerd als een Object
door type deductie. In dit voorbeeld is de instelling Optie strikt ingesteld op Uit op de pagina Compileren, Projectontwerper (Visual Basic).
In de volgende schermopname ziet u IntelliSense wanneer Option Infer is uitgeschakeld:
Notitie
Wanneer een variabele als een variabele Object
wordt gedeclareerd, kan het runtimetype worden gewijzigd terwijl het programma wordt uitgevoerd. Visual Basic voert bewerkingen uit met de naam boksen en uitpakken om te converteren tussen een Object
en een waardetype, waardoor de uitvoering langzamer wordt. Zie de Visual Basic Language Specification (Visual Basic Language Specification) voor meer informatie over boksen en uitpakken.
Typedeductie is van toepassing op procedureniveau en is niet van toepassing buiten een procedure in een klasse, structuur, module of interface.
Zie Deductie van het lokale type voor meer informatie.
Als er geen optieinferie-instructie aanwezig is
Als de broncode geen instructie bevat Option Infer
, wordt de instelling Option Infer op de compileerpagina, Project Designer (Visual Basic) gebruikt. Als de opdrachtregelcompilator wordt gebruikt, wordt de optie -optioninfer compiler gebruikt.
Optie afleiden instellen in de IDE
Selecteer een project in Solution Explorer. Klik in het menu Project op Eigenschappen.
Klik op het tabblad Compileren .
Stel de waarde in het invoervak Option in.
Wanneer u een nieuw project maakt, wordt de instelling Option Infer op het tabblad Compileren ingesteld op de instelling Option Infer in het dialoogvenster VB-standaardinstellingen. Als u het dialoogvenster VB-standaardinstellingen wilt openen, klikt u in het menu Extra op Opties. Vouw projecten en oplossingen uit in het dialoogvenster Opties en klik vervolgens op VB-standaardwaarden. De eerste standaardinstelling in VB Defaults is On
.
Optie afleiden instellen op de opdrachtregel
Neem de optie -optioninfer compiler op in de vbc-opdracht .
Standaardgegevenstypen en -waarden
In de volgende tabel worden de resultaten beschreven van verschillende combinaties van het opgeven van het gegevenstype en de initialisatiefunctie in een Dim
instructie.
Opgegeven gegevenstype? | Initialisatiefunctie opgegeven? | Opmerking | Resultaat |
---|---|---|---|
Nee | Nr. | Dim qty |
Als Option Strict deze optie is uitgeschakeld (de standaardinstelling), wordt de variabele ingesteld op Nothing .Als Option Strict dit is ingeschakeld, treedt er een compilatiefout op. |
Nr. | Ja | Dim qty = 5 |
Als Option Infer deze is ingeschakeld (de standaardinstelling), neemt de variabele het gegevenstype van de initialisatiefunctie. Zie deductie van het lokale type.Als Option Infer de variabele is uitgeschakeld en Option Strict is uitgeschakeld, wordt het gegevenstype van de variabele gebruikt Object .Als Option Infer deze is uitgeschakeld en Option Strict is ingeschakeld, treedt er een compilatietijdfout op. |
Ja | Nr. | Dim qty As Integer |
De variabele wordt geïnitialiseerd tot de standaardwaarde voor het gegevenstype. Zie Dim-instructie voor meer informatie. |
Ja | Ja | Dim qty As Integer = 5 |
Als het gegevenstype van de initialisatiefunctie niet kan worden omgezet in het opgegeven gegevenstype, treedt er een compilatiefout op. |
Voorbeeld 1
In de volgende voorbeelden ziet u hoe de Option Infer
instructie deductie van het lokale type inschakelt.
' 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
Voorbeeld 2
In het volgende voorbeeld ziet u dat het runtimetype kan verschillen wanneer een variabele wordt geïdentificeerd als een 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