Option Infer (instrucción)
Habilita el uso de la inferencia de tipo de variable local al declarar las variables.
Option Infer { On | Off }
Elementos
Término |
Definición |
On |
Opcional.Habilita la inferencia de tipo de variable local. |
Off |
Opcional.Deshabilita la inferencia de tipo de variable local. |
Comentarios
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 que se establece para Option Infer en un archivo está en conflicto con el valor establecido en el IDE o la línea de comandos, tiene prioridad el valor del archivo.
Al establecer Option Infer en On, puede declarar las 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á activada.La variable de la declaración Dim someVar = 2 se declara como un entero por inferencia de tipos.
IntelliSense cuando está activada la instrucción Option Infer
En la siguiente ilustración, Option Infer está desactivada.La variable de la declaración Dim someVar = 2 se declara como un Object por inferencia de tipos.En este ejemplo, el valor de Option Strict se establece en Off en Página Compilación, Diseñador de proyectos (Visual Basic).
IntelliSense cuando está desactivada la instrucción Option Infer
[!NOTA]
Cuando se declara una variable como un Object, puede cambiar el tipo en tiempo de ejecución mientras se ejecuta el programa.Visual Basic realiza las operaciones denominadas conversiones boxing y unboxing para convertir entre Object y un tipo de valor, que crea la ejecución más lenta.Para obtener información acerca de las conversiones boxing y unboxing, vea Especificación del lenguaje de Visual Basic.
La inferencia de tipos 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 información adicional, vea Inferencia de tipo de variable local (Visual Basic).
Cuando no existe una instrucción Option Infer
Si el código fuente no contiene una instrucción Option Infer, se utiliza el valor de Option Infer en Página Compilación, Diseñador de proyectos (Visual Basic).Si se utiliza el compilador de línea de comandos, se utiliza la opción del compilador /optioninfer.
Para establecer Option Infer en el IDE
En el Explorador de soluciones, seleccione un proyecto.En el menú Proyecto, haga clic en Propiedades.Para obtener más información, vea Introducción al Diseñador de proyectos.
Haga clic en la ficha Compilar.
Establezca el valor en la casilla Option infer.
Cuando se crea un nuevo proyecto, el valor de Option Infer en la pestaña Compilación se establece en el valor de Option Infer en el cuadro de diálogo Valores predeterminados de VB.Para obtener 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, a continuación, haga clic en Valores predeterminados de VB.El valor predeterminado inicial de Valores predeterminados de VB es On.
Para establecer Option Infer en la línea de comandos
- Incluya la opción del compilador /optioninfer en el comando vbc.
Valores y tipos de datos predeterminados
La tabla siguiente describe los resultados de varias combinaciones 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á desactivada (el valor predeterminado), la variable se establece en Nothing. Si Option Strict está activada, se produce un error en tiempo de compilación. |
No |
Sí |
Dim qty = 5 |
Si Option Infer está activada (el valor predeterminado), la variable toma el tipo de datos del inicializador.Vea Inferencia de tipo de variable local (Visual Basic). Si Option Infer y Option Strict están desactivadas, la variable toma el tipo de datos de Object. Si Option Infer está desactivada y Option Strict está activada, se produce un error en tiempo de compilación. |
Sí |
No |
Dim qty As Integer |
La variable se inicializa con el valor predeterminado para el tipo de datos.Para obtener más información, vea Instrucción Dim (Visual Basic). |
Sí |
Sí |
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
En los ejemplos siguientes se muestra cómo la instrucción Option Infer habilita la inferencia de tipo de variable 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
El ejemplo siguiente demuestra que el tipo en tiempo de ejecución puede variar cuando se identifica una variable 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
Referencia
Instrucción Dim (Visual Basic)
Option Explicit (Instrucción, Visual Basic)
Valores predeterminados de Visual Basic, Proyectos, Opciones (Cuadro de diálogo)
Conversión boxing y unboxing (Guía de programación de C#)