Share via


Infer-instruktion för alternativ

Möjliggör användning av lokal typinferens vid deklarering av variabler.

Syntax

Option Infer { On | Off }

Delar

Period Definition
On Valfritt. Aktiverar slutsatsdragning av lokal typ.
Off Valfritt. Inaktiverar slutsatsdragning av lokal typ.

Kommentarer

Om du vill ange Option Infer i en fil skriver Option Infer On du eller Option Infer Off överst i filen, före någon annan källkod. Om värdet som angetts för Option Infer i en fil står i konflikt med värdet som angetts i IDE eller på kommandoraden har värdet i filen företräde.

När du anger Option Infer till Onkan du deklarera lokala variabler utan att uttryckligen ange en datatyp. Kompilatorn härleder datatypen för en variabel från typen av dess initieringsuttryck.

I följande bild Option Infer är aktiverad. Variabeln i deklarationen Dim someVar = 2 deklareras som ett heltal efter typinferens.

Följande skärmbild visar IntelliSense när alternativinferens är aktiverat:

Screenshot showing IntelliSense view when Option Infer is on.

I följande bild Option Infer är inaktiverad. Variabeln i deklarationen Dim someVar = 2 deklareras som en Object slutsatsdragning av typen . I det här exemplet är inställningen Alternativ strikt inställd på Av på kompileringssidan , Projektdesigner (Visual Basic).

Följande skärmbild visar IntelliSense när alternativinferensen är inaktiverad:

Screenshot showing IntelliSense view when Option Infer is off.

Kommentar

När en variabel deklareras som en Objectkan körningstypen ändras medan programmet körs. Visual Basic utför åtgärder som kallas boxning och avboxning för att konvertera mellan en Object och en värdetyp, vilket gör körningen långsammare. Information om boxning och avboxning finns i Visual Basic Language Specification.

Typinferens gäller på procedurnivå och gäller inte utanför en procedur i en klass, struktur, modul eller gränssnitt.

Mer information finns i Slutsatsdragning av lokal typ.

När en alternativslutsats inte finns

Om källkoden inte innehåller någon Option Infer instruktion används inställningen Alternativ härledningkompileringssidan, Projektdesigner (Visual Basic). Om kommandoradskompilatorn används används kompilatoralternativet -optioninfer .

Så här anger du alternativslutsats i IDE

  1. I Solution Explorer väljer du ett projekt. Klicka på Egenskaperprojektmenyn.

  2. Klicka på fliken Kompilera .

  3. Ange värdet i rutan Alternativ härledning .

När du skapar ett nytt projekt anges inställningen Alternativ härledningfliken Kompilering till inställningen Alternativ härledning i dialogrutan VB-standardinställningar . Om du vill komma åt dialogrutan VB-standardinställningar klickar du på Alternativmenyn Verktyg. I dialogrutan Alternativ expanderar du Projekt och lösningar och klickar sedan på VB-standardvärden. Den första standardinställningen i VB Defaults är On.

Så här anger du alternativslutsats på kommandoraden

Inkludera kompilatoralternativet -optioninfer i vbc-kommandot .

Standarddatatyper och -värden

I följande tabell beskrivs resultatet av olika kombinationer av att ange datatypen och initieraren i en Dim instruktion.

Angiven datatyp? Har initieraren angetts? Exempel Resultat
Nej Nej Dim qty Om Option Strict är av (standardvärdet) är variabeln inställd på Nothing.

Om Option Strict är på uppstår ett kompileringsfel.
Nej Ja Dim qty = 5 Om Option Infer är på (standardvärdet) tar variabeln initiatorns datatyp. Se Slutsatsdragning av lokal typ.

Om Option Infer är av och Option Strict är av tar variabeln datatypen Object.

Om Option Infer är av och Option Strict är på uppstår ett kompileringsfel.
Ja Nej Dim qty As Integer Variabeln initieras till standardvärdet för datatypen. Mer information finns i Dim-instruktion.
Ja Ja Dim qty As Integer = 5 Om datatypen för initieraren inte kan konverteras till den angivna datatypen uppstår ett kompileringsfel.

Exempel 1

Följande exempel visar hur instruktionen Option Infer möjliggör slutsatsdragning av lokal typ.

' 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

Exempel 2

I följande exempel visas att körningstypen kan skilja sig åt när en variabel identifieras som en 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

Se även