web-dev-qa-db-fra.com

VB.NET équivalent au mot clé var C #

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.

144
Jack

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.

141
Adam Robinson

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 attendus
    • Infer 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.

45
Mark Hurd

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
15
Konrad Rudolph