Visual Basic .NET Language
Opcja wnioskowania
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 jakoObject
.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:Opcja wnioskowania wyłączona
Kompilator zgłosi błąd (zOption Strict On
)
lub weźmie pod uwagęq
jakoobject
typu (zOption 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