Existe-t-il un équivalent VB.NET du mot clé C # var
?
Je voudrais l'utiliser pour récupérer le résultat d'une requête LINQ.
Option Infer doit être sur pour que cela fonctionne correctement. Si c'est le cas, omettre le type dans VB.NET (Visual Basic 9) tapera implicitement la variable.
Ceci est pas identique à "Option Strict Off" dans les versions précédentes de VB.NET, en tant que la variable est fortement typée; c'est juste fait de manière implicite (comme le mot clé C # var
).
Dim foo = "foo"
foo
est déclaré en tant que String
.
Vous avez besoin de Option Infer On
, Puis utilisez simplement le mot clé Dim
, ainsi:
Dim query = From x In y Where x.z = w Select x
Contrairement à certaines des autres réponses, vous n'avez pas besoin de Option Strict On
.
Si vous utilisez le VS IDE, vous pouvez survoler les noms des variables, mais pour obtenir les types de variables à la compilation (GetType(variableName)
ne compile pas - "Type '<nom_variable>' n'est pas défini. "- et VarType(variable)
n'est en fait que la version VB 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
, Donne Object
Explicit On
, L'erreur "Nom" n'est pas déclaré. "
avec Dim
:
Infer On
, Donne les types attendusInfer Off
:
Strict On
, Error "Option Strict On exige que toutes les déclarations soient classées" En tant que "."
Strict Off
, Donne Object
Comme je l'ai mentionné dans les commentaires, il y a autres raisons pourquoi Option Strict On
Permet à Linq de fonctionner plus utilement. Plus précisément, vous ne pouvez pas obtenir que Into Max(Anon.SomeString)
fonctionne avec Option Strict Off
, Bien qu'il existe plusieurs solutions de contournement.
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