Поделиться через


Оператор "Вывод параметров"

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

Синтаксис

Option Infer { On | Off }

Комплектующие

Срок Определение
On Необязательно. Включает вывод локальных типов.
Off Необязательно. Отключает вывод локального типа.

Замечания

Чтобы задать Option Infer в файле, введите Option Infer On или Option Infer Off в верхней части файла до любого другого исходного кода. Если значение, заданное Option Infer в файле, конфликтует со значением, заданным в интегрированной среде разработки или в командной строке, значение в файле имеет приоритет.

Если задано значение Option InferOn, можно объявить локальные переменные без явного указания типа данных. Компилятор определяет тип данных переменной из типа выражения инициализации.

На следующем рисунке Option Infer включена функция. Переменная в объявлении Dim someVar = 2 объявляется как целое число по выводу типа.

На следующем снимке экрана показан IntelliSense при включении параметра "Вывод".

Снимок экрана: представление IntelliSense, когда включен параметр

На следующем рисунке Option Infer отключена. Переменная в объявлении Dim someVar = 2 объявляется как Object вывод типа. В этом примере параметр "Строгий" установлен настранице компиляции, конструктор проектов (Visual Basic).

На следующем снимке экрана показан IntelliSense при отключении параметра:

Снимок экрана: представление IntelliSense при отключении параметра

Замечание

Если переменная объявлена как объект Object, тип времени выполнения может измениться во время выполнения программы. Visual Basic выполняет операции, называемые боксом и распаковкой для преобразования между Object типом и типом значения, что делает выполнение более медленным. Сведения о боксе и распаковки см. в спецификации языка Visual Basic.

Вывод типа применяется на уровне процедуры и не применяется за пределами процедуры в классе, структуре, модуле или интерфейсе.

Дополнительные сведения см. в разделе "Вывод локальных типов".

Если оператор вывода параметра отсутствует

Если исходный Option Infer код не содержит инструкцию, используется параметр "Вывод параметров" на странице компиляции, конструктор проектов (Visual Basic). Если используется компилятор командной строки, используется параметр компилятора -optioninfer .

Установка параметра вывода в интегрированной среде разработки

  1. В обозревателе решенийвыберите проект. В меню Проект выберите пункт Свойства.

  2. Щёлкните вкладку Компиляция.

  3. Задайте значение в поле вывода "Параметр ".

При создании проекта параметр " Вывод параметров" на вкладке "Компиляция " устанавливается в диалоговом окне " Выбор параметров" в диалоговом окне "Значения по умолчанию VB ". Чтобы открыть диалоговое окно по умолчанию VB , в меню "Сервис " нажмите кнопку "Параметры". В диалоговом окне "Параметры" разверните узел "Проекты и решения", а затем щелкните "По умолчанию" VB. Начальным параметром по умолчанию в VB Defaults является On.

Установка параметра "Вывод" в командной строке

Включите параметр компилятора -optioninfer в команду vbc .

Типы и значения данных по умолчанию

В следующей таблице описываются результаты различных сочетаний указания типа данных и инициализатора в инструкции Dim .

Указанный тип данных? Инициализатор указан? Пример Результат
нет нет Dim qty Если Option Strict значение отключено (по умолчанию), переменная имеет значение Nothing.

Если Option Strict он включен, возникает ошибка во время компиляции.
нет Да Dim qty = 5 Если Option Infer он включен (по умолчанию), переменная принимает тип данных инициализатора. См. вывод локальных типов.

При Option Infer отключении и Option Strict отключении переменная принимает тип Objectданных.

Если Option Infer он отключен и Option Strict включен, возникает ошибка во время компиляции.
Да нет Dim qty As Integer Переменная инициализирована в значение по умолчанию для типа данных. Дополнительные сведения см. в инструкции Dim.
Да Да Dim qty As Integer = 5 Если тип данных инициализатора не преобразуется в указанный тип данных, возникает ошибка во время компиляции.

Пример 1

В следующих примерах показано, как Option Infer оператор включает вывод локального типа.

' Enable Option Infer before trying these examples.

' Variable num is an Integer.
Dim num = 5

' Variable dbl is a Double.
Dim dbl = 4.113

' Variable str is a String.
Dim str = "abc"

' Variable pList is an array of Process objects.
Dim pList = Process.GetProcesses()

' Variable i is an Integer.
For i = 1 To 10
    Console.WriteLine(i)
Next

' Variable item is a string.
Dim lst As New List(Of String) From {"abc", "def", "ghi"}

For Each item In lst
    Console.WriteLine(item)
Next

' Variable namedCust is an instance of the Customer class.
Dim namedCust = New Customer With {.Name = "Blue Yonder Airlines",
                                   .City = "Snoqualmie"}

' Variable product is an instance of an anonymous type.
Dim product = New With {Key .Name = "paperclips", .Price = 1.29}

' If customers is a collection of Customer objects in the following 
' query, the inferred type of cust is Customer, and the inferred type
' of custs is IEnumerable(Of Customer).
Dim custs = From cust In customers 
            Where cust.City = "Seattle" 
            Select cust.Name, cust.ID

Пример 2

В следующем примере показано, что тип времени выполнения может отличаться, если переменная определяется как .Object

' Disable Option Infer when trying this example.

Dim someVar = 5
Console.WriteLine(someVar.GetType.ToString)

' If Option Infer is instead enabled, the following
' statement causes a run-time error. This is because
' someVar was implicitly defined as an integer.
someVar = "abc"
Console.WriteLine(someVar.GetType.ToString)

' Output:
'  System.Int32
'  System.String

См. также