Visual Basic .NET Language
Вариант Infer
Поиск…
Что это?
Позволяет использовать вывод локального типа при объявлении переменных.
Что такое тип вывода?
Вы можете объявлять локальные переменные без явного указания типа данных. Компилятор передает тип данных переменной из типа выражения инициализации.
Опция Infer On :
Dim aString = "1234" '--> Will be treated as String by the compiler
Dim aNumber = 4711 '--> Will be treated as Integer by the compiler
против явного объявления типа:
'State a type explicitly
Dim aString as String = "1234"
Dim aNumber as Integer = 4711
Опция Infer Off:
Поведение компилятора с Option Infer Off
зависит от параметра Option Strict
который уже зарегистрирован здесь .
Опция Infer Off - опция Strict Off
Все переменные без явных деклараций типа объявляются какObject
.Dim aString = "1234" '--> Will be treated as Object by the compiler
Опция Infer Off - опция Strict On
Компилятор не даст вам объявить переменную без явного типа.'Dim aString = "1234" '--> Will not compile due to missing type in declaration
Как включить / отключить
Уровень документа
Он Option Infer On|Off
по умолчанию, но вы можете установить его, разместив Option Infer On|Off
в верхней части файла кода. Опция будет применяться ко всему документу.
Уровень проекта
Вы можете включить или отключить его через меню в Visual Studio:
Проект> Свойства [Проект]> вкладка «Компиляция»> «Вариант»
On|Off
раскрывающемся меню выберите On|Off
. Опция будет применяться ко всему документу.
Все новые проекты
Вы можете включить его по умолчанию для всех новых проектов, выбрав:
Инструменты> Параметры> Проекты и решения> По умолчанию VB> Параметр Infer
On|Off
раскрывающемся меню выберите On|Off
.
Когда использовать вывод типа
В принципе, вы можете использовать вывод типа всякий раз, когда это возможно.
Однако будьте осторожны при объединении Option Infer Off
и Option Strict Off
, так как это может привести к нежелательному поведению во время работы:
Dim someVar = 5
someVar.GetType.ToString() '--> System.Int32
someVar = "abc"
someVar.GetType.ToString() '--> System.String
Анонимный тип
Анонимные типы могут быть объявлены только с помощью Option Infer On
.
Они часто используются при работе с 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)}
Опция Infer Off
Компилятор либо выдаст ошибку (сOption Strict On
)
или будет рассматриватьq
какobject
типа (сOption Strict Off
).
Оба случая приведут к тому, что вы не можете использовать анонимный тип.
Парный / Decimals
Числовые переменные с знаков после запятой будет infered , как Double
по умолчанию:
Dim aNumber = 44.11 '--> Will be treated as type `Double` by the compiler
Если требуется другой тип типа Decimal
, значение, которое инициализировало переменную, должно быть помечено:
Dim mDecimal = 47.11D '--> Will be treated as type `Decimal` by the compiler