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 On
kan 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:
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:
Kommentar
När en variabel deklareras som en Object
kan 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ärledning på kompileringssidan, Projektdesigner (Visual Basic). Om kommandoradskompilatorn används används kompilatoralternativet -optioninfer .
Så här anger du alternativslutsats i IDE
I Solution Explorer väljer du ett projekt. Klicka på Egenskaper på projektmenyn.
Klicka på fliken Kompilera .
Ange värdet i rutan Alternativ härledning .
När du skapar ett nytt projekt anges inställningen Alternativ härledning på fliken Kompilering till inställningen Alternativ härledning i dialogrutan VB-standardinställningar . Om du vill komma åt dialogrutan VB-standardinställningar klickar du på Alternativ på menyn 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