Поиск…


Что это?

Позволяет использовать вывод локального типа при объявлении переменных.

Что такое тип вывода?

Вы можете объявлять локальные переменные без явного указания типа данных. Компилятор передает тип данных переменной из типа выражения инициализации.

Опция 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 On
    Компилятор распознает анонимный тип: Анонимный тип - опция Infer On

  • Опция 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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow