VB.NET equivalente a C # var palabra clave

¿Hay un VB.NET equivalente a la palabra clave var C #?

Me gustaría usarlo para recuperar el resultado de una consulta LINQ.

La opción Infer debe estar activada para que esto funcione correctamente. Si es así, omitir el tipo en VB.NET (Visual Basic 9) tecleará implícitamente la variable.

Esto no es lo mismo que “Opción estricta desactivada” en versiones anteriores de VB.NET, ya que la variable está fuertemente tipada; simplemente lo hace de forma implícita (como la palabra clave var C #).

 Dim foo = "foo" 

foo se declara como una String .

Necesita Option Infer On y luego simplemente use la palabra clave Dim , así:

 Dim query = From x In y Where xz = w Select x 

Contrariamente a algunas de las otras respuestas, no necesita Option Strict On .

Si está utilizando VS IDE, puede pasar el cursor sobre los nombres de las variables, pero para obtener los tipos de variables en tiempo de GetType(variableName) no se comstack – “Tipo ‘‘ no está definido.” – y VarType(variable) es en realidad solo la versión VB de variable.GetType() que devuelve el tipo de la instancia almacenada en la variable en tiempo de ejecución) Usé:

 Function MyVarType(Of T)(ByRef Var As T) As Type Return GetType(T) End Function 

En detalle:

  • sin Dim :

    Explicit Off , da Object

    Explicit On , el error “Nombre” no está declarado. ”

  • con Dim :

    • Infer On , da tipos esperados
    • Infer Off :

      Strict On , error “Option Strict On requiere que todas las declaraciones tengan un ‘As’ clasue”.

      Strict Off , da Object

Como mencioné en los comentarios, hay otras razones por las que Option Strict On permite que Linq funcione de manera más útil. Específicamente, no puede obtener Into Max(Anon.SomeString) para trabajar con Option Strict Off , aunque hay una serie de soluciones.

Simplemente use la palabra clave convencional Dim sin un tipo.

Ejemplo de trabajo mínimo:

 Option Strict On ' Always a good idea Option Infer On ' Required for type inference Imports System Module MainModule Sub Main() Dim i = 42 Dim s = "Hello" Console.WriteLine("{0}, {1}", i.GetType(), s.GetType()) ' Prints System.Int32, System.String ' End Sub End Module 

El objeto funcionó para mí en este ejemplo

DO#

 JToken projects = client.Search(ObjCode.PROJECT, new { groupID = userGroupID }); foreach( var j in projects["data"].Children()) { Debug.WriteLine("Name: {0}", j.Value("name")); } 

VB

 Dim projects As JToken = client.Search(ObjCode.PROJECT, New With { _ Key .groupID = userGroupID _ }) For Each j As Object In projects("data").Children() Debug.WriteLine("Name: {0}", j.Value(Of String)("name")) Next