Option Infer (instrucción)Option Infer Statement

Permite el uso de la inferencia de tipo de variable local en la declaración de variables.Enables the use of local type inference in declaring variables.

SintaxisSyntax

Option Infer { On | Off }

ElementosParts

TérminoTerm DefiniciónDefinition
On Opcional.Optional. Habilita la inferencia de tipo de variable local.Enables local type inference.
Off Opcional.Optional. Deshabilita la inferencia de tipo de variable local.Disables local type inference.

ComentariosRemarks

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.To set Option Infer in a file, type Option Infer On or Option Infer Off at the top of the file, before any other source code. 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.If the value set for Option Infer in a file conflicts with the value set in the IDE or on the command line, the value in the file has precedence.

Al establecer Option Infer en On, puede declarar variables locales sin especificar explícitamente un tipo de datos.When you set Option Infer to On, you can declare local variables without explicitly stating a data type. El compilador deduce el tipo de datos de una variable a partir del tipo de su expresión de inicialización.The compiler infers the data type of a variable from the type of its initialization expression.

En la siguiente ilustración, Option Infer está activado.In the following illustration, Option Infer is turned on. La variable de la declaración Dim someVar = 2 se declara como un entero mediante la inferencia de tipo.The variable in the declaration Dim someVar = 2 is declared as an integer by type inference.

En la captura de pantalla siguiente se muestra IntelliSense cuando Option Infer está activada:The following screenshot shows IntelliSense when Option Infer is on:

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

En la siguiente ilustración, Option Infer está desactivado.In the following illustration, Option Infer is turned off. La variable de la declaración Dim someVar = 2 se declara como un Object mediante la inferencia de tipo.The variable in the declaration Dim someVar = 2 is declared as an Object by type inference. En este ejemplo, el valor Option Strict está establecido en OFF en la Página compilar, diseñador de proyectos (Visual Basic).In this example, the Option Strict setting is set to Off on the Compile Page, Project Designer (Visual Basic).

La captura de pantalla siguiente muestra IntelliSense cuando Option Infer es OFF:The following screenshot shows IntelliSense when Option Infer is 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.When a variable is declared as an Object, the run-time type can change while the program is running. Visual Basic realiza operaciones denominadas conversión 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.Visual Basic performs operations called boxing and unboxing to convert between an Object and a value type, which makes execution slower. Para obtener información sobre las conversiones boxing y unboxing, vea la especificación del lenguaje Visual Basic.For information about boxing and unboxing, see the Visual Basic Language Specification.

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.Type inference applies at the procedure level, and does not apply outside a procedure in a class, structure, module, or interface.

Para obtener más información, consulte inferencia de tipo de local.For additional information, see Local Type Inference.

Cuando la instrucción Option Infer no está presenteWhen an Option Infer Statement Is Not Present

Si el código fuente no contiene una instrucción Option Infer, se usa el valor de Option Infer en la Página compilar, el diseñador de proyectos (Visual Basic) .If the source code does not contain an Option Infer statement, the Option Infer setting on the Compile Page, Project Designer (Visual Basic) is used. Si se usa el compilador de línea de comandos, se usa la opción del compilador -optioninfer ( .If the command-line compiler is used, the -optioninfer compiler option is used.

Cómo establecer Option Infer en el IDETo set Option Infer in the IDE

  1. En el Explorador de soluciones, seleccione un proyecto.In Solution Explorer, select a project. En el menú Proyecto, haga clic en Propiedades.On the Project menu, click Properties.

  2. Haga clic en la pestaña Compilar.Click the Compile tab.

  3. Establezca el valor en el cuadro Option Infer .Set the value in the Option infer box.

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 .When you create a new project, the Option Infer setting on the Compile tab is set to the Option Infer setting in the VB Defaults dialog box. Para tener acceso al cuadro de diálogo valores predeterminados de VB , en el menú herramientas , haga clic en Opciones.To access the VB Defaults dialog box, on the Tools menu, click Options. En el cuadro de diálogo Opciones, expanda Proyectos y soluciones y, después, haga clic en Valores predeterminados de VB.In the Options dialog box, expand Projects and Solutions, and then click VB Defaults. La configuración predeterminada inicial en los valores predeterminados de VB es On.The initial default setting in VB Defaults is On.

Cómo establecer Option Infer en la línea de comandosTo set Option Infer on the command line

Incluya la opción del compilador -optioninfer ( en el comando VBC .Include the -optioninfer compiler option in the vbc command.

Tipos de datos y valores predeterminadosDefault Data Types and Values

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.The following table describes the results of various combinations of specifying the data type and initializer in a Dim statement.

¿Tipo de datos especificado?Data type specified? ¿Inicializador especificado?Initializer specified? EjemploExample ResultadoResult
NoNo NoNo Dim qty Si Option Strict está desactivado (valor predeterminado), la variable se establece en Nothing.If Option Strict is off (the default), the variable is set to Nothing.

Si Option Strict está activado, se produce un error en tiempo de compilación.If Option Strict is on, a compile-time error occurs.
NoNo Yes Dim qty = 5 Si Option Infer está activado (valor predeterminado), la variable toma el tipo de datos del inicializador.If Option Infer is on (the default), the variable takes the data type of the initializer. Vea inferencia de tipo de local.See Local Type Inference.

Si Option Infer está desactivado y Option Strict está desactivado, la variable toma el tipo de datos de Object.If Option Infer is off and Option Strict is off, the variable takes the data type of Object.

Si Option Infer está desactivado y Option Strict está activado, se produce un error en tiempo de compilación.If Option Infer is off and Option Strict is on, a compile-time error occurs.
Yes NoNo Dim qty As Integer La variable se inicializa con el valor predeterminado del tipo de datos.The variable is initialized to the default value for the data type. Para obtener más información, vea Dim (instrucción).For more information, see Dim Statement.
Yes Yes 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.If the data type of the initializer is not convertible to the specified data type, a compile-time error occurs.

EjemploExample

Los ejemplos siguientes muestran cómo la instrucción Option Infer habilita la inferencia de tipo local.The following examples demonstrate how the Option Infer statement enables local type inference.

' 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

EjemploExample

El siguiente ejemplo demuestra que el tipo en tiempo de ejecución puede ser diferente cuando una variable se identifica como un Object.The following example demonstrates that the run-time type can differ when a variable is identified as an 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énSee also