Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Habilita el uso de la inferencia de tipos locales en la declaración de variables.
Sintaxis
Option Infer { On | Off }
Partes
| Término | Definición |
|---|---|
On |
Opcional. Habilita la inferencia de tipos locales. |
Off |
Opcional. Deshabilita la inferencia de tipos locales. |
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.
Cuando se establece Option InferOnen , puede declarar variables locales sin indicar explícitamente un tipo de datos. El compilador deduce el tipo de datos de una variable del tipo de su expresión de inicialización.
En la ilustración siguiente, Option Infer está activado. La variable de la declaración Dim someVar = 2 se declara como un entero por inferencia de tipo.
En la captura de pantalla siguiente se muestra IntelliSense cuando la inferencia de opciones está activada:
En la ilustración siguiente, Option Infer está desactivado. La variable de la declaración Dim someVar = 2 se declara como por Object inferencia de tipo. En este ejemplo, la opción Option Strict se establece en Desactivado en la página Compilar, el Diseñador de proyectos (Visual Basic) .
En la captura de pantalla siguiente se muestra IntelliSense cuando la inferencia de opciones está desactivada:
Nota:
Cuando una variable se declara como , Objectel tipo en tiempo de ejecución puede cambiar mientras se ejecuta el programa. Visual Basic realiza operaciones denominadas conversión boxing y unboxing para convertir entre un Object tipo de valor y , lo que hace que la ejecución sea más lenta. Para obtener información sobre la conversión boxing y unboxing, vea La especificación del lenguaje Visual Basic.
La inferencia de tipos se aplica en el nivel de procedimiento y no se aplica fuera de un procedimiento de una clase, estructura, módulo o interfaz.
Para obtener más información, consulte Inferencia de tipos locales.
Cuando una instrucción Option Infer no está presente
Si el código fuente no contiene una Option Infer instrucción , se usa la opción Option Infer en la página Compilar, se usa 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 .
Para establecer Option Infer en el IDE
En Explorador de soluciones, seleccione un proyecto. En el menú Proyecto , haga clic en Propiedades.
Haga clic en la pestaña Compilar.
Establezca el valor en el cuadro Inferir opción .
Al crear un nuevo proyecto, la opción Inferir de la pestaña Compilar se establece en la opción Inferir en el cuadro de diálogo Valores predeterminados de VB . Para acceder 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. La configuración predeterminada inicial de VB Defaults 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
En la tabla siguiente se describen los resultados de varias combinaciones de especificar el tipo de datos y el inicializador en una Dim instrucción .
| ¿Tipo de datos especificado? | ¿Se especificó el inicializador? | 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 | Sí | Dim qty = 5 |
Si Option Infer está activado (valor predeterminado), la variable toma el tipo de datos del inicializador. Consulte Inferencia de tipos locales.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. |
| Sí | No | Dim qty As Integer |
La variable se inicializa en el valor predeterminado del tipo de datos. Para obtener más información, vea Dim Statement. |
| Sí | Sí | Dim qty As Integer = 5 |
Si el tipo de datos del inicializador no se puede convertir en el tipo de datos especificado, se produce un error en tiempo de compilación. |
Ejemplo 1
En los ejemplos siguientes se muestra cómo la instrucción habilita la Option Infer inferencia de tipos locales.
' 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 2
En el ejemplo siguiente se muestra que el tipo en tiempo de ejecución puede diferir cuando una variable se identifica como .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