Option Infer (instrucción)

Permite el uso de la inferencia de tipo de variable local en la declaración de variables.

Sintaxis

Option Infer { On | Off }

Partes

Término Definición
On Opcional. Habilita la inferencia de tipo de variable local.
Off Opcional. Deshabilita la inferencia de tipo de variable local.

Observaciones

Para establecer Option Infer en un archivo, escriba Option Infer On o Option Infer Off en la parte superior del archivo, antes de cualquier otro código fuente. Si el valor establecido para Option Infer en un archivo entra en conflicto con el valor establecido en el IDE o en la línea de comandos, el valor del archivo tiene prioridad.

Al establecer Option Infer en On, puede declarar variables locales sin especificar explícitamente un tipo de datos. El compilador deduce el tipo de datos de una variable a partir del tipo de su expresión de inicialización.

En la siguiente ilustración, Option Infer está activado. La variable de la declaración Dim someVar = 2 se declara como un entero mediante la inferencia de tipo.

En la captura de pantalla siguiente se muestra IntelliSense cuando Option Infer está activada:

Captura de pantalla que muestra la vista de IntelliSense cuando Option Infer está activada.

En la siguiente ilustración, Option Infer está desactivado. La variable de la declaración Dim someVar = 2 se declara como un Object mediante la inferencia de tipo. En este ejemplo, el valor Option Strict está establecido en OFF en la Página compilar, diseñador de proyectos (Visual Basic).

La captura de pantalla siguiente muestra IntelliSense cuando Option Infer es OFF:

Captura de pantalla que muestra la vista de IntelliSense cuando Option Infer es OFF.

Nota

Cuando una variable se declara como un Object, el tipo de tiempo de ejecución puede cambiar mientras se ejecuta el programa. Visual Basic realiza operaciones llamadas Boxing y unboxing para realizar la conversión entre un Object y un tipo de valor, lo que hace que la ejecución sea más lenta. Para obtener información sobre las conversiones boxing y unboxing, vea la especificación del lenguaje Visual Basic.

La inferencia de tipo se aplica en el nivel de procedimiento, y no se aplica fuera de un procedimiento en una clase, estructura, módulo o interfaz.

Para obtener más información, consulte inferencia de tipo de local.

Cuando la instrucción Option Infer no está presente

Si el código fuente no contiene una Option Infer instrucción, se utiliza la configuración Option Infer en la Página compilar, el diseñador de proyectos (Visual Basic) . Si se usa el compilador de línea de comandos, se usa la opción del compilador -optioninfer ( .

Cómo establecer Option Infer en el IDE

  1. En el Explorador de soluciones, seleccione un proyecto. En el menú Proyecto, haga clic en Propiedades.

  2. Haga clic en la pestaña Compilar.

  3. Establezca el valor en el cuadro Option Infer .

Al crear un nuevo proyecto, el valor Option Infer de la pestaña compilar se establece en el valor Option Infer del cuadro de diálogo valores predeterminados de VB . Para tener acceso al cuadro de diálogo valores predeterminados de VB , en el menú herramientas , haga clic en Opciones. En el cuadro de diálogo Opciones, expanda Proyectos y soluciones y, después, haga clic en Valores predeterminados de VB. La configuración predeterminada inicial en los valores predeterminados de VB es On .

Cómo establecer Option Infer en la línea de comandos

Incluya la opción del compilador -optioninfer ( en el comando VBC .

Tipos de datos y valores predeterminados

En la tabla siguiente se describen los resultados de diversas combinaciones resultantes de especificar el tipo de datos y el inicializador en una instrucción Dim.

¿Tipo de datos especificado? ¿Inicializador especificado? Ejemplo Resultado
No No Dim qty Si Option Strict está desactivado (valor predeterminado), la variable se establece en Nothing.

Si Option Strict está activado, se produce un error en tiempo de compilación.
No Dim qty = 5 Si Option Infer está activado (valor predeterminado), la variable toma el tipo de datos del inicializador. Vea inferencia de tipo de local.

Si Option Infer está desactivado y Option Strict está desactivado, la variable toma el tipo de datos de Object.

Si Option Infer está desactivado y Option Strict está activado, se produce un error en tiempo de compilación.
No Dim qty As Integer La variable se inicializa con el valor predeterminado del tipo de datos. Para obtener más información, vea Dim (instrucción).
Dim qty As Integer = 5 Si el tipo de datos del inicializador no es convertible al tipo de datos especificado, se produce un error en tiempo de compilación.

Ejemplo

Los ejemplos siguientes muestran cómo la instrucción Option Infer habilita la inferencia 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

Ejemplo

El siguiente ejemplo demuestra que el tipo en tiempo de ejecución puede ser diferente cuando una variable se identifica como un 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

Vea también