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

这个问题在这里已有答案:

  • 什么是C#“var”关键字的VB.NET等价物?                                     1个答案

是否有一个VB.NET等同于C#var关键字?

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

Jack asked 2019-05-22T13:52:44Z
4个解决方案
138 votes

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

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

Dim foo = "foo"

foo声明为String

Adam Robinson answered 2019-05-22T13:53:19Z
44 votes

您需要Option Strict On然后只需使用Into Max(Anon.SomeString)关键字,因此:

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

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

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

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

详细地:

  • 没有Option Strict On

    Option Strict On,给出Into Max(Anon.SomeString)

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

  • Option Strict On

    • Option Strict On,给出预期的类型
    • Option Strict On

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

      Option Strict On,给出Into Max(Anon.SomeString)

正如我在评论中提到的,还有其他原因可以解释为什么Option Strict On允许Linq更有效地执行。 具体来说,您无法使用Into Max(Anon.SomeString)Option Strict Off一起使用,但有许多解决方法。

Mark Hurd answered 2019-05-22T13:55:05Z
15 votes

只需使用传统的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
Konrad Rudolph answered 2019-05-22T13:55:40Z
-1 votes

在这个例子中,对象对我有效

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
Beto answered 2019-05-22T13:56:15Z
translate from https://stackoverflow.com:/questions/2478552/vb-net-equivalent-to-c-sharp-var-keyword