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