VB.NET équivalent au mot-clé c# var [dupliquer]

cette question a déjà une réponse ici:

  • Qu'est-ce que le VB.NET équivalent du mot-clé c # "var"? 1 réponse

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.

143
demandé sur Matthew Murdoch 2010-03-19 18:36:50

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 .

137
répondu Adam Robinson 2018-04-05 13:30:57

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 '' n'est pas défini."- et 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 , donne Object

    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 , donne Object

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.

43
répondu Mark Hurd 2016-05-17 12:40:30

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
14
répondu Konrad Rudolph 2013-12-09 22:10:20

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
-1
répondu Beto 2012-01-18 20:48:05