Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ermöglicht die Verwendung der lokalen Typ-Ableitung bei der Deklarierung von Variablen.
Syntax
Option Infer { On | Off }
Bestandteile
Begriff | Definition |
---|---|
On |
Wahlfrei. Aktiviert die Lokale Typ-Ableitung. |
Off |
Wahlfrei. Deaktiviert die Ableitung des lokalen Typs. |
Bemerkungen
Wenn Sie eine Datei festlegen Option Infer
möchten, geben Sie die Datei vor einem anderen Quellcode ein, oder Option Infer On
Option Infer Off
geben Sie sie am Anfang der Datei ein. Wenn der in einer Datei festgelegte Option Infer
Wert mit dem in der IDE oder in der Befehlszeile festgelegten Wert in Konflikt steht, hat der Wert in der Datei Vorrang.
Wenn Sie diese Eigenschaft On
festlegenOption Infer
, können Sie lokale Variablen deklarieren, ohne explizit einen Datentyp anzugeben. Der Compiler leitet den Datentyp einer Variablen vom Typ des Initialisierungsausdrucks ab.
In der folgenden Abbildung Option Infer
ist die Option aktiviert. Die Variable in der Deklaration Dim someVar = 2
wird als ganze Zahl nach Typferenz deklariert.
Der folgende Screenshot zeigt IntelliSense, wenn Option Infer aktiviert ist:
In der folgenden Abbildung ist die Option Option Infer
deaktiviert. Die Variable in der Deklaration Dim someVar = 2
wird als Object
Typ-Ableitung deklariert. In diesem Beispiel wird die Einstellung "Option Strict " auf " Aus " auf der Kompilierungsseite , Project Designer (Visual Basic) festgelegt.
Der folgende Screenshot zeigt IntelliSense, wenn Option Infer deaktiviert ist:
Hinweis
Wenn eine Variable als eine Object
Variable deklariert wird, kann sich der Laufzeittyp ändern, während das Programm ausgeführt wird. Visual Basic führt Vorgänge aus, die als Boxing und Unboxing bezeichnet werden, um zwischen einem Object
Werttyp und einem Werttyp zu konvertieren, wodurch die Ausführung langsamer wird. Informationen zum Boxen und Aufheben des Posteingangs finden Sie in der Visual Basic-Sprachspezifikation.
Die Typreferenz gilt auf Prozedurebene und gilt nicht außerhalb einer Prozedur in einer Klasse, Struktur, Einem Modul oder einer Schnittstelle.
Weitere Informationen finden Sie unter "Lokale Typinference".
Wenn eine Option Infer-Anweisung nicht vorhanden ist
Wenn der Quellcode keine Anweisung enthältOption Infer
, wird die Option Infer-Einstellung auf der Kompilierungsseite verwendet, Project Designer (Visual Basic). Wenn der Befehlszeilencompiler verwendet wird, wird die Compileroption "-optioninfer " verwendet.
So legen Sie den Optionsausschluss in der IDE fest
Wählen Sie im Projektmappen-Explorerein Projekt aus. Klicken Sie im Menü Projekt auf Eigenschaften.
Klicken Sie auf den Tab Kompilieren.
Legen Sie den Wert im Feld "Option infer" fest .
Wenn Sie ein neues Projekt erstellen, wird die Option Infer-Einstellung auf der Registerkarte "Kompilieren" im Dialogfeld "VB-Standardwerte" auf die Einstellung "Option Infer" festgelegt. Klicken Sie im Menü "Extras" auf "Optionen", um auf das Dialogfeld VB-Standardwerte zuzugreifen. Erweitern Sie im Dialogfeld OptionenProjekte und Lösungen, und klicken Sie dann auf VB-Standardwerte. Die anfängliche Standardeinstellung in VB-Standardwerten lautet On
.
So legen Sie "Option Infer" in der Befehlszeile fest
Schließen Sie die Compileroption "-optioninfer " in den vbc-Befehl ein.
Standarddatentypen und -werte
In der folgenden Tabelle werden die Ergebnisse verschiedener Kombinationen zum Angeben des Datentyps und des Initialisierers in einer Dim
Anweisung beschrieben.
Der angegebene Datentyp? | Initialisierer angegeben? | Beispiel | Ergebnis |
---|---|---|---|
Nein | Nein | Dim qty |
Wenn Option Strict sie deaktiviert ist (Standardeinstellung), wird die Variable auf Nothing .Falls Option Strict aktiviert, tritt ein Kompilierungszeitfehler auf. |
Nein | Ja | Dim qty = 5 |
Wenn Option Infer dies der Standardwert ist, verwendet die Variable den Datentyp des Initialisierers. Siehe "Lokale Typinference".Wenn Option Infer deaktiviert und Option Strict deaktiviert ist, übernimmt die Variable den Datentyp von Object .Wenn Option Infer deaktiviert und Option Strict aktiviert ist, tritt ein Kompilierungszeitfehler auf. |
Ja | Nein | Dim qty As Integer |
Die Variable wird auf den Standardwert für den Datentyp initialisiert. Weitere Informationen finden Sie unter Dim-Anweisung. |
Ja | Ja | Dim qty As Integer = 5 |
Wenn der Datentyp des Initialisierers nicht in den angegebenen Datentyp konvertierbar ist, tritt ein Kompilierungszeitfehler auf. |
Beispiel 1
Die folgenden Beispiele veranschaulichen, wie die Option Infer
Anweisung lokale Typausschlüsse ermöglicht.
' 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
Beispiel 2
Das folgende Beispiel zeigt, dass sich der Laufzeittyp unterscheiden kann, wenn eine Variable als eine 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