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


Option Infer - оператор

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

Синтаксис

Option Infer { On | Off }

Детали

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

Замечания

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

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

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

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

Screenshot showing IntelliSense view when Option Infer is on.

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

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

Screenshot showing IntelliSense view when Option Infer is off.

Примечание.

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

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

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

Если оператор Option Infer отсутствует

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

Чтобы включить Option Infer в среде разработки

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

  2. Откройте вкладку Компиляция.

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

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

Чтобы включить Option Infer в командной строке

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

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

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

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

Если параметр Option Strict включен, возникает ошибка времени при компиляции.
No Да 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

См. также