VB.NET équivalent au mot-clé c# var [dupliquer]
cette question a déjà une réponse ici:
est - il un VB.NET équivalent au mot-clé C# var
?
je voudrais l'utiliser pour récupérer le résultat d'une requête LINQ.
4 réponses
Option Infer doit être sur pour que cela fonctionne correctement. Si c'est le cas, omettre le type VB.NET (Visual Basic 9) Tapera implicitement la variable.
c'est pas la même chose que" Option Strict Off "dans les versions précédentes de VB.NET, comme la variable est fortement dactylographié; il est juste fait implicitement (comme le C# var
) mot clé.
Dim foo = "foo"
foo
est déclaré comme String
.
vous avez besoin de Option Infer On
et puis il suffit d'utiliser le Dim
mot-clé, ainsi:
Dim query = From x In y Where x.z = w Select x
contrairement à certaines autres réponses, vous ne besoin Option Strict On
.
si vous utilisez le VS IDE, vous pouvez simplement survoler les noms des variables, mais pour obtenir les types de variables de compilation ( GetType(variableName)
ne compile pas-" Type 'VarType(variable)
est en fait juste le VB version de variable.GetType()
qui renvoie le type de l'instance stockée dans la variable à l'exécution) j'ai utilisé:
Function MyVarType(Of T)(ByRef Var As T) As Type
Return GetType(T)
End Function
en détail:
-
sans
Dim
:Explicit Off
, donneObject
Explicit On
, erreur " Nom " n'est pas déclaré." -
avec
Dim
:-
Infer On
, donne les types attendus -
Infer Off
:Strict On
erreur "Option Strict on exige que toutes les déclarations pour avoir "Comme" clasue."Strict Off
, donneObject
-
comme je l'ai mentionné dans les commentaires, il y a autres raisons pourquoi Option Strict On
permet à Linq de effectuer plus utilement. Plus précisément , vous ne pouvez pas obtenir Into Max(Anon.SomeString)
pour travailler avec Option Strict Off
, bien qu'il y ait un certain nombre de solutions de rechange.
utilisez simplement le mot-clé conventionnel Dim
sans type.
exemple de travail Minimal:
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
objet travaillé pour moi dans cet exemple
c#
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