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


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 при включенном параметре Option Infer

IntelliSense-просмотров объявления.

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

IntelliSense при отключенном параметре Option Infer

IntelliSense-просмотров объявления.

Примечание

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

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

Дополнительные сведения см. в разделе Вывод локального типа (Visual Basic).

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

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

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

  1. Выберите проект в обозревателе решений. В меню Проект выберите пункт Свойства. Для получения дополнительной информации см. Introduction to the Project Designer.

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

  3. Задайте значение в поле Option infer.

При создании нового проекта значение параметра Option Infer на вкладке Компиляция задается в соответствии со значением параметра Option Infer в диалоговом окне Параметры Visual Basic по умолчанию. Чтобы открыть диалоговое окно Параметры Visual Basic по умолчанию, в меню Сервис щелкните Настройки. В диалоговом окне Настройки разверните Проекты и решения, затем щелкните Параметры Visual Basic по умолчанию. Начальный параметр по умолчанию в Параметры Visual Basic по умолчанию — On.

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

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

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

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

Указан тип данных?

Указан инициализатор?

Пример

Результат

Нет

Нет

Dim qty

Если Option Strict отключен (по умолчанию), для переменной устанавливается значение Nothing.

Если параметр Option Strict включен, при компиляции возникает ошибка.

Нет

Да

Dim qty = 5

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

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

Если параметр Option Infer отключен, а параметр Option Strict включен, при компиляции возникает ошибка.

Да

Нет

Dim qty As Integer

Переменная инициализируется со значением по умолчанию для типа данных. Для получения дополнительной информации см. Оператор Dim (Visual Basic).

Да

Да

Dim qty As Integer = 5

Если тип данных инициализатора нельзя преобразовать в указанный тип данных, при компиляции возникает ошибка.

Пример

В следующих примерах показано, как оператор 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

В следующем примере показано, что тип времени выполнения может различаться, когда переменная указана как 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

См. также

Ссылки

Оператор Dim (Visual Basic)

Оператор Option Compare

Оператор Option Explicit (Visual Basic)

Оператор Option Strict

Страница "Параметры Visual Basic по умолчанию", папка "Проекты", диалоговое окно "Параметры"

/optioninfer

Упаковка-преобразование и распаковка-преобразование (Руководство по программированию на C#)

Основные понятия

Вывод локального типа (Visual Basic)