Delen via


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 InferOn, 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:

Screenshot showing IntelliSense view when Option Infer is on.

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:

Screenshot showing IntelliSense view when Option Infer is off.

Notitie

Wanneer een variabele als een variabele Objectwordt 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

  1. Selecteer een project in Solution Explorer. Klik in het menu Project op Eigenschappen.

  2. Klik op het tabblad Compileren .

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

Zie ook