c# - reservadas - visual basic.net pdf
VB.NET equivalente a C#var palabra clave (4)
Esta pregunta ya tiene una respuesta aquí:
¿Hay un VB.NET equivalente a la palabra clave var
C #?
Me gustaría usarlo para recuperar el resultado de una consulta LINQ.
Necesita Option Infer On
y luego simplemente use la palabra clave Dim
, así:
Dim query = From x In y Where x.z = 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 compila - "Tipo ''<nombre de variable>'' 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
, daObject
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
, daObject
-
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
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
.
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<string>("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