Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Позволяет использовать вывод локального типа в декларативных переменных.
Синтаксис
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
отключена. Переменная в объявлении Dim someVar = 2
объявляется как Object
вывод типа. В этом примере параметр "Строгий" установлен настранице компиляции, конструктор проектов (Visual Basic).
На следующем снимке экрана показан IntelliSense при отключении параметра:
Замечание
Если переменная объявлена как объект Object
, тип времени выполнения может измениться во время выполнения программы. Visual Basic выполняет операции, называемые боксом и распаковкой для преобразования между Object
типом и типом значения, что делает выполнение более медленным. Сведения о боксе и распаковки см. в спецификации языка Visual Basic.
Вывод типа применяется на уровне процедуры и не применяется за пределами процедуры в классе, структуре, модуле или интерфейсе.
Дополнительные сведения см. в разделе "Вывод локальных типов".
Если оператор вывода параметра отсутствует
Если исходный Option Infer
код не содержит инструкцию, используется параметр "Вывод параметров" на странице компиляции, конструктор проектов (Visual Basic). Если используется компилятор командной строки, используется параметр компилятора -optioninfer .
Установка параметра вывода в интегрированной среде разработки
В обозревателе решенийвыберите проект. В меню Проект выберите пункт Свойства.
Щёлкните вкладку Компиляция.
Задайте значение в поле вывода "Параметр ".
При создании проекта параметр " Вывод параметров" на вкладке "Компиляция " устанавливается в диалоговом окне " Выбор параметров" в диалоговом окне "Значения по умолчанию 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