Sök…


Vad är det?

Aktiverar användning av inferens av lokal typ vid deklarering av variabler.

Vad är typinferens?

Du kan deklarera lokala variabler utan att uttryckligen ange en datatyp. Kompilatorn anger datatypen för en variabel från typen av dess initialiseringsuttryck.

Alternativ Avsluta på :

Dim aString  = "1234" '--> Will be treated as String by the compiler
Dim aNumber  = 4711   '--> Will be treated as Integer by the compiler

mot uttrycklig typdeklaration:

'State a type explicitly
Dim aString as String = "1234"
Dim aNumber as Integer = 4711

Alternativ Avsluta av:
Kompilatorens beteende med Option Infer Off beror på inställningen Option Strict som redan är dokumenterad här .

  • Alternativ Avsluta Av - Alternativ Strikt Av
    Alla variabler utan explicita typdeklarationer deklareras som Object .

    Dim aString  = "1234" '--> Will be treated as Object by the compiler
    
  • Alternativ Avlägsna - Alternativ strikt på
    Kompilatorn låter dig inte deklarera en variabel utan en uttrycklig typ.

    'Dim aString  = "1234" '--> Will not compile due to missing type in declaration
    

Hur man aktiverar / inaktiverar det

Dokumentnivå

Den är som standard på, men du kan ställa in den genom att placera Option Infer On|Off högst upp i kodfilen. Alternativet kommer att gälla för hela dokumentet.

Projektnivå

Du kan slå på / stänga av den via menyn i Visual Studio:

Projekt> [Projekt] Egenskaper> Kompilera flik> Val av slutsats

Välj On|Off i rullgardinsmenyn. Alternativet kommer att gälla för hela dokumentet.

Alla nya projekt

Du kan slå på den som standard för alla nya projekt genom att välja:

Verktyg> Alternativ> Projekt och lösningar> VB-standard> Alternativ infer

Välj On|Off i rullgardinsmenyn.

När ska man använda slutsatsen

I grund och botten kan du använda typinferens när det är möjligt.
Var dock försiktig när du kombinerar Option Infer Off och Option Strict Off , eftersom det kan leda till oönskat körbeteende:

Dim someVar = 5
someVar.GetType.ToString() '--> System.Int32
someVar = "abc"
someVar.GetType.ToString() '--> System.String

Anonym typ
Anonyma typer kan endast deklareras med Option Infer On .
De används ofta vid hantering av LINQ :

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)}
  • Alternativ Avsluta på
    Kompilatorn känner igen den anonyma typen: Anonym typ - Alternativ infer on

  • Alternativ Avsluta
    Kompilatorn kommer antingen att kasta ett fel (med Option Strict On )
    eller kommer att betrakta q som object (med Option Strict Off ).
    Båda fallen ger resultatet att du inte kan använda den anonyma typen.


Dubbel / Decimals
Numeriska variabler med decimaler kommer att sluts som Double standard:

Dim aNumber = 44.11 '--> Will be treated as type `Double` by the compiler

Om en annan typ som Decimal önskas måste värdet som initialiseras variabeln markeras:

Dim mDecimal = 47.11D '--> Will be treated as type `Decimal` by the compiler


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow