Szukaj…


Co to jest?

Umożliwia stosowanie wnioskowania typu lokalnego w deklarowaniu zmiennych.

Co to jest wnioskowanie typu?

Możesz zadeklarować zmienne lokalne bez wyraźnego podawania typu danych. Kompilator określa typ danych zmiennej na podstawie wyrażenia inicjującego.

Opcja wnioskowania :

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

vs. wyraźna deklaracja typu:

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

Opcja wnioskowania wyłączona:
Zachowanie kompilatora z Option Infer Off zależy od ustawienia Option Strict , które zostało już tutaj udokumentowane .

  • Opcja wnioskowania wyłączona - opcja ściśle wyłączona
    Wszystkie zmienne bez wyraźnych deklaracji typu są deklarowane jako Object .

    Dim aString  = "1234" '--> Will be treated as Object by the compiler
    
  • Opcja wnioskowania wyłączona - opcja ściśle włączona
    Kompilator nie pozwala zadeklarować zmiennej bez wyraźnego typu.

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

Jak włączyć / wyłączyć

Poziom dokumentu

Domyślnie jest włączony, ale można go ustawić, umieszczając Option Infer On|Off na górze pliku kodu. Opcja dotyczy całego dokumentu.

Poziom projektu

Możesz go włączyć / wyłączyć za pomocą menu w Visual Studio:

Projekt> Właściwości [Projekt]> Zakładka Kompiluj> Wnioskowanie opcji

Wybierz On|Off z menu rozwijanego. Opcja dotyczy całego dokumentu.

Wszystkie nowe projekty

Możesz włączyć ją domyślnie dla wszystkich nowych projektów, wybierając:

Narzędzia> Opcje> Projekty i rozwiązania> Wartości domyślne VB> Opcja wnioskowania

Wybierz On|Off z menu rozwijanego.

Kiedy używać wnioskowania typu

Zasadniczo możesz używać wnioskowania typu, gdy tylko jest to możliwe.
Należy jednak zachować ostrożność podczas łączenia Option Infer Off i Option Strict Off , ponieważ może to prowadzić do niepożądanych zachowań w czasie wykonywania:

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

Typ anonimowy
Typy anonimowe można zadeklarować tylko z Option Infer On .
Są one często używane w kontaktach z 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)}
  • Opcja wnioskowania włączona
    Kompilator rozpozna anonimowy typ: Typ anonimowy - opcja wnioskowania włączona

  • Opcja wnioskowania wyłączona
    Kompilator zgłosi błąd (z Option Strict On )
    lub weźmie pod uwagę q jako object typu (z Option Strict Off ).
    Oba przypadki spowodują, że nie będziesz mógł użyć typu anonimowego.


Podwójne / dziesiętne
Zmienne numeryczne z miejscami dziesiętnymi będą domyślnie podawane jako Double :

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

Jeśli pożądany jest inny typ, jak Decimal należy zaznaczyć wartość, która zainicjowała zmienną:

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow