Partilhar via


Declaração de inferência de opção

Permite o uso de inferência de tipo local na declaração de variáveis.

Sintaxe

Option Infer { On | Off }

Partes

Termo Definição
On Opcional. Permite a inferência de tipo local.
Off Opcional. Desabilita a inferência de tipo local.

Observações

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 em Option Infer um arquivo entrar em conflito com o valor definido no IDE ou na linha de comando, o valor no arquivo terá precedência.

Ao definir Option Infer como On, você pode declarar variáveis locais sem declarar explicitamente um tipo de dados. O compilador infere o tipo de dados de uma variável a partir 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 opção Infer está ativada:

Screenshot showing IntelliSense view when Option Infer is on.

Na ilustração a seguir, Option Infer está desativado. A variável na declaração Dim someVar = 2 é declarada como uma Object inferência por tipo. Neste exemplo, a configuração Opção estrita é definida como Desativado na página de compilação, Project Designer (Visual Basic).

A captura de tela a seguir mostra o IntelliSense quando a opção Infer está desativada:

Screenshot showing IntelliSense view when Option Infer is off.

Nota

Quando uma variável é declarada como um Object, o tipo de tempo de execução pode mudar enquanto o programa está em execução. Visual Basic executa 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 boxe e unboxing, consulte a Especificação de linguagem do Visual Basic.

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

Para obter informações adicionais, 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 Option Infer instrução, a configuração Option Infer na página de compilação, Project Designer (Visual Basic) será usada. Se o compilador de linha de comando for usado, a opção de compilador -optioninfer será usada.

Para definir Option Infer no IDE

  1. No Gerenciador de Soluções, selecione um projeto. No menu Projeto, clique em Propriedades.

  2. Clique na guia Compilar .

  3. Defina o valor na caixa Inferir opção.

Quando você cria um novo projeto, a configuração Option Infer na guia Compilar é definida como a configuração Option Infer na caixa de diálogo VB Defaults . Para acessar a caixa de diálogo Padrões do VB, no menu Ferramentas, clique em Opções. Na caixa de diálogo Opções, expanda Projetos e Soluções e clique em Padrões VB. A configuração padrão inicial em VB Defaults é On.

Para definir Option Infer na linha de comando

Inclua a opção de 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 especificação do tipo de dados e do inicializador em uma Dim instrução.

Tipo de dados especificado? Inicializador especificado? Exemplo Result
No Não Dim qty Se Option Strict estiver desativado (o padrão), a variável será definida como Nothing.

Se Option Strict estiver ativado, ocorrerá um erro em tempo de compilação.
Não Sim Dim qty = 5 Se Option Infer estiver ativado (o padrão), a variável usará o tipo de dados do inicializador. Consulte Inferência de tipo local.

Se Option Infer estiver desativado e Option Strict desligado, a variável usará o tipo de dados de Object.

Se Option Infer estiver desativado e Option Strict ativado, ocorrerá um erro em tempo de compilação.
Sim No Dim qty As Integer A variável é inicializada com o valor padrão para o tipo de dados. Para obter mais informações, consulte Declaraçã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 em tempo de compilação.

Exemplo 1

Os exemplos a seguir demonstram como a instrução permite a inferência de Option Infer 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 que o tipo de tempo de execução pode diferir quando uma variável é identificada como um Objectarquivo .

' 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