Compartilhar via


Declaração de Option Infer

Permite o uso de inferência de tipos locais 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 Inferem um arquivo conflita com o valor definido no IDE ou na linha de comando, o valor no arquivo possui precedência.

Ao definir Option Infer para On, você pode declarar variáveis locais sem explicitamente indicando 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 do Dim someVar = 2 é declarado como um número inteiro por inferência de tipo.

IntelliSense quando Option Infer está ligado.

Modo de exibição do IntelliSense da declaração.

Na ilustração a seguir, Option Infer está desativada.A variável na declaração do Dim someVar = 2 é declarada como uma Object por inferência de tipo.Neste exemplo, o Option Strict for definida como Off sobre o Compilar página Project Designer (Visual Basic).

IntelliSense quando Option Infer está desativado

Modo de exibição do IntelliSense da declaração.

ObservaçãoObservação

Quando uma variável é declarada como uma Object, o tipo de tempo de execução pode alterar, enquanto o programa estiver sendo executado.Visual Basicexecuta operações chamadas 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 conversão boxing e unboxing, consulte o Especificação de linguagem Visual Basic.

Inferência de tipo aplica-se no nível do procedimento e não se aplica fora de um procedimento em uma classe, estrutura, módulo ou interface.

Para mais informações, consulte: Inferência de tipo de local (Visual Basic).

Quando um Option Infer de instrução não estiver presente

Se o código-fonte não contém um Option Infer instrução, o Option Infer definição na Compilar página Project Designer (Visual Basic) é usado.Se o compilador de linha de comando for usado, o /optioninfer opção de compilador é usada.

Para definir o Option Infer no IDE

  1. Em Solution Explorer, selecione um projeto.No menu Project, clique em Properties..Para obter mais informações, consulte Introdução ao Project Designer.

  2. Clique na guia Compile.

  3. Defina o valor no Option infer caixa.

Quando você cria um novo projeto, o Option Infer definição na Compilar for definido como o Option Infer definição na Padrões de VB caixa de diálogo.Para acesso a Padrões de VB caixa de diálogo, diante a Ferramentas menu, clique em Opções.No Opções caixa de diálogo caixa, expanda projetos e soluçõese, em seguida, clique em Padrões de VB.A configuração padrão inicial no Padrões de VB é On.

Colocando Option Infer na linha de comando

  • Inclua a opção de compilador /optioninfer no comando vbc.

Tipos de dados padrão e valores

A tabela a seguir descreve os resultados de várias combinações de especificar o tipo de dados e um inicializador em um Dim instrução.

Tipo de dados especificado?

Inicializador especificado?

Exemplo

Resultado

Não

Não

Dim qty

Se Option Strict está desativado (padrão), a variável é definida como Nothing.

Se Option Strict está ativa, ocorrerá um erro em tempo de compilação.

Não

Sim

Dim qty = 5

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

Se Option Infer está desativado e Option Strict está desativado, a variável leva o tipo de dados de Object.

Se Option Infer está desativado e Option Strict está ativa, ocorrerá um erro em tempo de compilação.

Sim

Não

Dim qty As Integer

A variável é inicializada com o valor padrão para o tipo de dados.Para obter mais informações, consulte Instrução (Visual Basic) Dim.

Sim

Sim

Dim qty As Integer = 5

Se o tipo de dados do inicializador não é convertido para o tipo de dados especificado, ocorrerá um erro de tempo de compilação.

Exemplo

O exemplo a seguir demonstra como a declaraçãoOption Infer permite 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 (Visual Basic) Dim

Instrução Option Compare

Opção Explicit Statement (Visual Basic)

Opção Strict Statement

Caixa de diálogo Opções de padrões, projetos, Visual Basic

/optioninfer

Boxing e Unboxing (C# Guia de programação)

Conceitos

Inferência de tipo de local (Visual Basic)