Option Infer – příkaz

Povolí použití odvozování místního typu v deklarování proměnných.

Syntaxe

Option Infer { On | Off }

Součástky

Pojem definice
On Nepovinné. Povolí odvození místního typu.
Off Nepovinné. Zakáže odvozovat místní typ.

Poznámky

Pokud chcete nastavit Option Infer soubor, zadejte Option Infer On nebo Option Infer Off v horní části souboru před jakýkoli jiný zdrojový kód. Pokud je hodnota nastavená Option Infer v souboru v konfliktu s hodnotou nastavenou v integrovaném vývojovém prostředí nebo na příkazovém řádku, má hodnota v souboru přednost.

Když nastavíte hodnotu Option InferOn, můžete deklarovat místní proměnné bez explicitního zadání datového typu. Kompilátor odvodí datový typ proměnné z typu inicializačního výrazu.

Na následujícím obrázku Option Infer je zapnutá. Proměnná v deklaraci Dim someVar = 2 je deklarována jako celé číslo podle odvození typu.

Následující snímek obrazovky ukazuje Technologii IntelliSense, když je zapnutá možnost odvození:

Screenshot showing IntelliSense view when Option Infer is on.

Na následujícím obrázku Option Infer je vypnutý. Proměnná v deklaraci Dim someVar = 2 je deklarována jako odvození Object typu. V tomto příkladu je nastavení Option Strict nastaveno na Vypnuto na stránce Kompilace, Návrhář projektu (Visual Basic).

Následující snímek obrazovky ukazuje Technologii IntelliSense, když je vypnutá možnost odvození:

Screenshot showing IntelliSense view when Option Infer is off.

Poznámka:

Pokud je proměnná deklarována jako Objectproměnná, může se typ běhu během běhu programu změnit. Visual Basic provádí operace označované jako boxing a unboxing k převodu Object mezi a typem hodnoty, což zpomaluje provádění. Informace o boxování a rozbalování naleznete v tématu Specifikace jazyka Visual Basic.

Odvození typu se vztahuje na úrovni procedury a nevztahuje se mimo proceduru ve třídě, struktuře, modulu nebo rozhraní.

Další informace najdete v tématu Odvození místního typu.

Není-li k dispozici příkaz odvození možnosti

Pokud zdrojový kód neobsahuje Option Infer příkaz, použije se nastavení Odvození možnosti na stránce Kompilace Návrhář projektu (Visual Basic). Pokud se použije kompilátor příkazového řádku, použije se možnost kompilátoru -optioninfer .

Nastavení možnosti odvození v integrovaném vývojovém prostředí

  1. V Průzkumník řešení vyberte projekt. V nabídce Projekt klepněte na příkaz Vlastnosti.

  2. Klikněte na kartu Kompilace .

  3. Nastavte hodnotu v poli Odvozovat možnost.

Při vytváření nového projektu je nastavení Odvození možnosti na kartě Kompilace nastaveno na nastavení Odvození možnosti v dialogovém okně Výchozí nastavení VB. Chcete-li získat přístup k dialogovému okně Výchozí hodnoty VB, klepněte v nabídce Nástroje na příkaz Možnosti. V dialogovém okně Možnosti rozbalte položku Projekty a řešení a klepněte na tlačítko Výchozí hodnoty VB. Počáteční výchozí nastavení ve výchozím nastavení VB je On.

Nastavení odvození možnosti na příkazovém řádku

Do příkazu vbc zahrňte možnost kompilátoru -optioninfer.

Výchozí datové typy a hodnoty

Následující tabulka popisuje výsledky různých kombinací určení datového typu a inicializátoru Dim v příkazu.

Zadaný datový typ? Inicializátor byl zadán? Příklad Výsledek
No Ne Dim qty Pokud Option Strict je vypnutá (výchozí), proměnná je nastavená na Nothinghodnotu .

Pokud Option Strict je zapnutá, dojde k chybě v době kompilace.
No Ano Dim qty = 5 Pokud Option Infer je zapnutá (výchozí), proměnná přebírá datový typ inicializátoru. Viz odvození místního typu.

Pokud Option Infer je vypnutý a Option Strict je vypnutý, proměnná přebírá datový typ Object.

Pokud Option Infer je vypnutý a Option Strict je zapnutý, dojde k chybě v době kompilace.
Yes No Dim qty As Integer Proměnná se inicializuje na výchozí hodnotu datového typu. Další informace naleznete v tématu Dim – příkaz.
Ano Yes Dim qty As Integer = 5 Pokud datový typ inicializátoru není konvertibilní na zadaný datový typ, dojde k chybě kompilace.

Příklad 1

Následující příklady ukazují, jak Option Infer příkaz umožňuje odvozovat místní 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

Příklad 2

Následující příklad ukazuje, že typ běhu se může lišit, pokud je proměnná identifikována jako .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

Viz také