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 als Object 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 ein
    Der Compiler erkennt den anonymen Typ: Anonymer Typ - Option Inferieren ein

  • Option Infer aus
    Der Compiler gibt entweder einen Fehler aus (mit Option Strict On )
    oder wird q als object (mit Option 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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow