Compartilhar via


Instrução Option Infer

Permite o uso de inferência de tipo local ao declarar variáveis.

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.

IntelliSense quando o Option Infer está ligado

Exibição do IntelliSense da declaração.

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 Opção Estrita está definida como Desligada no Página de Compilação, Designer de Projeto (Visual Basic).

IntelliSense quando o Option Infer está desligado

Exibição do IntelliSense da declaração.

Dica

Quando uma variável é declarada como um Object, o tipo de tempo de execução pode ser alterado enquanto o programa está sendo executado.Visual Basic executa operações denominadas boxing e unboxing para converter entre um Object e um tipo de valor, que torna a execução mais lenta.Para obter informações sobre a boxing e unboxing, consulte o Especificação da linguagem 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 (Visual Basic).

Quando uma Instrução Option Infer Não Está Presente

Se o código-fonte não tiver uma instrução Option Infer, a configuração Option Infer no Página de Compilação, Designer de Projeto (Visual Basic) é usada. Se o compilador de linha de comando for usado, a opção do compilador /optioninfer é usada.

Para definir o Option Infer no IDE

  1. No Gerenciador de Soluções, selecione um projeto. No menu Projeto, clique em Propriedades. Para obter mais informações, consulte Introduction to the Project Designer.

  2. Clique na guia Compilar.

  3. Defina o valor na caixa Option infer.

Ao criar um novo projeto, a configuração Option Infer na guia Compilar é definida para a configuração Option Infer na caixa de diálogo Padrões de 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

  • Inclui a opção do compilador /optioninfer 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

Resultado

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.

Não

Sim

Dim qty = 5

Se Option Infer estiver ativado (padrão), a variável usa o tipo de dados do inicializador. Consulte Inferência de tipo local (Visual Basic).

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, consulte Instrução Dim (Visual Basic).

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

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

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

Consulte também

Referência

Instrução Dim (Visual Basic)

Instrução Option Compare

Instrução Option Explicit (Visual Basic)

Instrução Option Strict

Caixa de diálogo Padrões do Visual Basic, Projetos, Opções

/optioninfer

Conversões boxing e unboxing (Guia de Programação em C#)

Conceitos

Inferência de tipo local (Visual Basic)