VB.NET相当于C#var关键字

时间:2010-03-19 15:36:51

标签: c# vb.net linq keyword var

是否存在与C#var关键字等效的VB.NET?

我想用它来检索LINQ查询的结果。

4 个答案:

答案 0 :(得分:139)

Option Infer必须 才能使其正常运行。如果是这样,那么省略VB.NET(Visual Basic 9)中的类型将隐式键入变量。

这是与以前版本的VB.NET中的“Option Strict Off”相同,因为变量强类型的;它只是隐式地完成(比如C#var)关键字。

Dim foo = "foo"

foo被声明为String

答案 1 :(得分:45)

您需要Option Infer On,然后只需使用Dim关键字:

Dim query = From x In y Where x.z = w Select x

与其他一些答案相反,您需要Option Strict On

如果你正在使用VS IDE,你可以将鼠标悬停在变量名称上,但要获得编译时类型的变量(GetType(variableName)不能编译 - “Type”< variablename>'不是定义。“ - 和VarType(variable)实际上只是variable.GetType()的VB版本,它返回运行时存储在变量中的实例的类型)我用过:

Function MyVarType(Of T)(ByRef Var As T) As Type
    Return GetType(T)
End Function

详细说明:

  • 没有Dim

    Explicit Off,提供Object

    Explicit On,错误“名称''未声明。”

  • Dim

    • Infer On,提供预期类型
    • Infer Off

      Strict On,错误“Option Strict On要求所有声明都有'As'clasue。”

      Strict Off,提供Object

正如我在评论中提到的,有other reasons为什么Option Strict On允许Linq更有效地执行。具体来说,虽然有许多解决方法,但您无法让Into Max(Anon.SomeString)Option Strict Off一起使用。

答案 2 :(得分:15)

只需使用传统的Dim关键字而无需使用类型。

最小的工作示例:

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

答案 3 :(得分:-1)

对象在此示例中为我工作

<强> 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