Instrução Option Infer
Permite o uso de inferência de tipo local ao declarar variáveis.
Sintaxe
Option Infer { On | Off }
Partes
Termo | Definição |
---|---|
On |
Opcional. Permite inferência de tipo local. |
Off |
Opcional. Desabilita inferência de tipo local. |
Comentários
Para definir Option Infer
em um arquivo, digite Option Infer On
ou Option Infer Off
na parte superior do arquivo, antes de qualquer outro código-fonte. Se o valor definido para Option Infer
em um arquivo entrar em conflito com o valor definido no IDE ou na linha de comando, o valor no arquivo possui precedência.
Quando você define Option Infer
para On
, você pode declarar variáveis locais sem especificar explicitamente um tipo de dados. O compilador infere o tipo de dados de uma variável do tipo de sua expressão de inicialização.
Na ilustração a seguir, Option Infer
está ativado. A variável na declaração Dim someVar = 2
é declarada como um inteiro por inferência de tipo.
A captura de tela a seguir mostra o IntelliSense quando a instrução Option Infer está ativada:
Na ilustração a seguir, o Option Infer
está desativado. A variável na declaração Dim someVar = 2
é declarada como um Object
por inferência de tipo. Neste exemplo, a configuração de Option Strict está definida como Desativada em Compilar Página, Designer de Projeto (Visual Basic).
A captura de tela a seguir mostra o IntelliSense quando a instrução Option Infer está desativada:
Observação
Quando uma variável é declarada como um Object
, o tipo de tempo de execução pode ser alterado enquanto o programa está sendo executado. O Visual Basic executa operações denominadas boxing e unboxing para converter entre um Object
e um tipo de valor, o que torna a execução mais lenta. Para obter informações sobre boxing e unboxing, consulte a Especificação de Linguagem do Visual Basic.
A inferência de tipo aplica-se no nível do procedimento e não fora de um procedimento em uma classe, estrutura, módulo ou interface.
Para obter mais informações, consulte Inferência de tipo local.
Quando uma Instrução Option Infer Não Está Presente
Se o código-fonte não contiver uma instruçãoOption Infer
, será usada a configuração de Option Infer em Compilar Página, Designer de Projeto (Visual Basic). Se for usado o compilador de linha de comando, será usada a opção do compilador -optioninfer.
Para definir o Option Infer no IDE
No Gerenciador de Soluções, selecione um projeto. No menu Projeto , clique em Propriedades.
Clique na guia Compilar.
Defina o valor na caixa Option infer.
Quando você cria um novo projeto, a configuração de Option Infer na guia Compilar é definida para a configuração de Option Infer na caixa de diálogo Padrões do VB. Para acessar a caixa de diálogo Padrões de VB, no menu Ferramentas, clique em Opções. Na caixa de diálogo Opções, expanda Projetos e Soluções e, em seguida, clique em Padrões de VB. A configuração inicial padrão nos Padrões de VB é On
.
Para definir o Option Infer na linha de comando
Inclua a opção -optioninfer do compilador no comando vbc.
Tipos de Dados e Valores Padrão
A tabela a seguir descreve os resultados de várias combinações de especificar o tipo de dados e o inicializador em uma instrução Dim
.
Tipo de dados especificado? | Inicializador especificado? | Exemplo | Result |
---|---|---|---|
Não | Não | Dim qty |
Se o Option Strict estiver desativado (padrão), a variável é definida como Nothing .Se Option Strict estiver ativado, ocorre um erro de tempo de compilação. |
No | Yes | Dim qty = 5 |
Se Option Infer estiver ativado (padrão), a variável usa o tipo de dados do inicializador. Confira Inferência de tipo de variável local.Se Option Infer estiver desativado e Option Strict estiver desativado, a variável usa o tipo de dados do Object .Se Option Infer estiver desativado e Option Strict estiver ativado, ocorre um erro de tempo de compilação. |
Sim | Não | Dim qty As Integer |
A variável é inicializada para o valor padrão para o tipo de dados. Para obter mais informações, confira Instrução Dim. |
Sim | Sim | Dim qty As Integer = 5 |
Se o tipo de dados do inicializador não for conversível para o tipo de dados especificado, ocorrerá um erro de tempo de compilação. |
Exemplo 1
Os exemplos a seguir demonstram como a instrução Option Infer
habilita a inferência de tipo local.
' 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
Exemplo 2
O exemplo a seguir demonstra o tipo de tempo de execução pode ser diferente quando uma variável é identificada como um 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