是否存在与C#var
关键字等效的VB.NET?
我想用它来检索LINQ查询的结果。
答案 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