Buscar..


¿Qué es?

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

¿Qué es la inferencia de tipos?

Puede declarar variables locales sin indicar explícitamente un tipo de datos. El compilador infiere el tipo de datos de una variable del tipo de su expresión de inicialización.

Opción Inferir En :

Dim aString  = "1234" '--> Will be treated as String by the compiler
Dim aNumber  = 4711   '--> Will be treated as Integer by the compiler

Declaración de tipo explícita vs.

'State a type explicitly
Dim aString as String = "1234"
Dim aNumber as Integer = 4711

Opción Inferir Off:
El comportamiento del compilador con Option Infer Off depende de la configuración de Option Strict que ya está documentada aquí .

  • Opción Inferir desactivada - Opción estricta desactivada
    Todas las variables sin declaraciones explícitas de tipo se declaran como Object .

    Dim aString  = "1234" '--> Will be treated as Object by the compiler
    
  • Opción Inferir desactivada - Opción estricta activada
    El compilador no le permitirá declarar una variable sin un tipo explícito.

    'Dim aString  = "1234" '--> Will not compile due to missing type in declaration
    

Cómo habilitarlo / deshabilitarlo

Nivel de documento

Está activado de forma predeterminada, pero puede configurarlo colocando Option Infer On|Off en la parte superior del archivo de código. La opción se aplicará a todo el documento.

Nivel de proyecto

Puede activarlo / desactivarlo a través del menú en Visual Studio:

Proyecto> Propiedades de [Proyecto]> Ficha Compilar> Opción infer

Seleccione On|Off en el menú desplegable. La opción se aplicará a todo el documento.

Todos los nuevos proyectos

Puede activarlo de forma predeterminada para todos los proyectos nuevos seleccionando:

Herramientas> Opciones> Proyectos y soluciones> Valores predeterminados de VB> Opción Inferir

Seleccione On|Off en el menú desplegable.

Cuándo usar inferencia de tipo

Básicamente puedes usar la inferencia de tipos siempre que sea posible.
Sin embargo, tenga cuidado al combinar Option Infer Off y Option Strict Off , ya que esto puede llevar a un comportamiento de tiempo de ejecución no deseado:

Dim someVar = 5
someVar.GetType.ToString() '--> System.Int32
someVar = "abc"
someVar.GetType.ToString() '--> System.String

Tipo Anónimo
Los tipos anónimos solo se pueden declarar con Option Infer On .
Se usan a menudo cuando se trata de LINQ :

Dim countryCodes = New List(Of String)
countryCodes.Add("en-US")
countryCodes.Add("en-GB")
countryCodes.Add("de-DE")
countryCodes.Add("de-AT")

Dim q = From code In countryCodes
        Let split = code.Split("-"c)
        Select New With {.Language = split(0), .Country = split(1)}
  • Opción Inferir En
    El compilador reconocerá el tipo anónimo: Tipo anónimo - Opción Inferir en

  • Opción Inferir Off
    El compilador lanzará un error (con la Option Strict On )
    o considerará q como tipo de object (con la Option Strict Off ).
    Ambos casos producirán el resultado de que no puede utilizar el tipo anónimo.


Dobles / Decimales
Las variables numéricas con posiciones decimales se deducirán como Double por defecto:

Dim aNumber = 44.11 '--> Will be treated as type `Double` by the compiler

Si se desea otro tipo como Decimal el valor que inicializó la variable debe marcarse:

Dim mDecimal = 47.11D '--> Will be treated as type `Decimal` by the compiler


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow