Visual Basic .NET Language
Option Infer
Suche…
Was ist es?
Ermöglicht die Verwendung lokaler Typinferenz bei der Deklaration von Variablen.
Was ist Typ Inferenz?
Sie können lokale Variablen deklarieren, ohne explizit einen Datentyp anzugeben. Der Compiler entnimmt den Datentyp einer Variablen aus dem Typ ihres Initialisierungsausdrucks.
Option Infer am :
Dim aString = "1234" '--> Will be treated as String by the compiler
Dim aNumber = 4711 '--> Will be treated as Integer by the compiler
vs. explizite Typdeklaration:
'State a type explicitly
Dim aString as String = "1234"
Dim aNumber as Integer = 4711
Option Infer Off:
Das Verhalten des Compilers bei Option Infer Off
hängt von der Option Strict
Einstellung ab, die hier bereits dokumentiert ist .
Option Infer Off - Option Strict Off
Alle Variablen ohne explizite Typdeklarationen werden alsObject
deklariert.Dim aString = "1234" '--> Will be treated as Object by the compiler
Option Infer Off - Option Strict On
Der Compiler lässt Sie keine Variablen ohne expliziten Typ deklarieren.'Dim aString = "1234" '--> Will not compile due to missing type in declaration
So aktivieren / deaktivieren Sie es
Dokumentebene
Sie ist standardmäßig aktiviert, aber Sie können sie festlegen, indem Sie Option Infer On|Off
am Anfang der Option Infer On|Off
. Die Option gilt für das gesamte Dokument.
Projektebene
Sie können es über das Menü in Visual Studio ein- und ausschalten:
Projekt> [Projekt] Eigenschaften> Registerkarte Kompilieren> Option
Wählen On|Off
im Dropdown-Menü On|Off
. Die Option gilt für das gesamte Dokument.
Alle neuen Projekte
Sie können es standardmäßig für alle neuen Projekte aktivieren, indem Sie Folgendes auswählen:
Extras> Optionen> Projekte und Lösungen> VB-Standardeinstellungen> Option Infer
Wählen On|Off
im Dropdown-Menü On|Off
.
Wann Typ-Inferenz verwenden soll
Grundsätzlich können Sie Typinferenz verwenden, wann immer dies möglich ist.
Option Infer Off
Sie jedoch vorsichtig, wenn Sie die Option Infer Off
und Option Strict Off
kombinieren, da dies zu unerwünschtem Laufzeitverhalten führen kann:
Dim someVar = 5
someVar.GetType.ToString() '--> System.Int32
someVar = "abc"
someVar.GetType.ToString() '--> System.String
Anonymer Typ
Anonyme Typen können nur mit Option Infer On
.
Sie werden häufig beim Umgang mit LINQ verwendet :
Dim countryCodes = New List(Of String)
countryCodes.Add("en-US")
countryCodes.Add("en-GB")
countryCodes.Add("de-DE")
countryCodes.Add("de-AT")
Dim q = From code In countryCodes
Let split = code.Split("-"c)
Select New With {.Language = split(0), .Country = split(1)}
Option Infer aus
Der Compiler gibt entweder einen Fehler aus (mitOption Strict On
)
oder wirdq
alsobject
(mitOption Strict Off
).
In beiden Fällen wird das Ergebnis erzielt, dass Sie den anonymen Typ nicht verwenden können.
Doppelte / Dezimalzahlen
Numerische Variablen mit Dezimalstellen werden standardmäßig als Double
:
Dim aNumber = 44.11 '--> Will be treated as type `Double` by the compiler
Wenn ein anderer Typ wie Decimal
gewünscht wird, muss der Wert, mit dem die Variable initialisiert wurde, markiert werden:
Dim mDecimal = 47.11D '--> Will be treated as type `Decimal` by the compiler