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

是否有一个相当于C# var关键字的VB.NET?

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

在VB.NET中省略这个types(Visual Basic 9)会隐式地inputvariables。

这与以前版本的VB.NET中的“Option Strict Off” 一样,因为variables强types的; 它只是隐式地(如C# var )关键字。

 Dim foo = "foo" 

foo被声明为一个String

选项必须打开才能正常工作。

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

 Dim query = From x In y Where xz = w Select x 

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

如果你使用的是VS IDE,你可以将鼠标hover在variables名上,但是为了获得编译时types的variables( GetType(variableName)不能编译 – “types'<variablename>'没有被定义。 VarType(variable)实际上只是VB版本的variable.GetType() VarType(variable) variable.GetType() ,它返回运行时variables中存储的实例的types)我用:

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

详细:

  • Dim

    Explicit Off ,给出Object

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

  • Dim

    • Infer On ,给出预期的types
    • Infer Off

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

      Strict Off ,给Object

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

只需使用传统的Dim关键字而不需要一个types。

最小工作示例:

 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 

对象在这个例子中为我工作

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