回答
忽略VB.NET(Visual Basic 9)中的类型将隐式键入变量。
这是不一样的“选项严格关”在VB.NET以前的版本,作为变量为强类型;它只是隐含地完成(如C#var
)的关键字。
Dim foo = "foo"
foo
被声明为String
。
Option Infer必须是在为了使它正常工作。
问了一些东西,马上找到答案 – 2011-03-17 19:01:15
Dim foo等价于动态foo而不是? – 2012-08-31 05:51:14
@Quandry:不,它不是 – 2012-08-31 11:04:30
只需使用传统的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
这不是错误吗?根据其他答案,只有'Option Infer'需要? (Option Strict解决了不同的问题。) – ToolmakerSteve 2013-12-09 21:48:14
@ToolmakerSteve正确。在Visual Studio的预览版中(不记得哪一个)你需要两个,AFAIR。 – 2013-12-09 22:09:47
如果你有'Infer Off'和'Strict Off',''GetType'的结果是一样的,但'i'和's'实际上是'Object'。 – 2013-12-10 13:34:18
你需要Option Infer On
,然后只用了Dim
关键字,即:
Dim query = From x In y Where x.z = w Select x
相反,一些其他的答案,你不需要Option Strict On
。
如果您使用的是VS IDE你可以将鼠标悬停在变量名,但要获得编译时类型的变量(GetType(variableName)
没有编译 - “类型‘<VARIABLENAME>’没有定义。” - 和VarType(variable)
实际上仅仅是VB版的variable.GetType()
返回存储在运行时的变量的实例的类型)我使用:
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
,错误“选项严格On要求所有声明有一个 '作为' clasue。“Strict Off
,给人Object
正如我在评论中提到的,有other reasons为什么Option Strict On
允许LINQ到更有效地执行。特别是,你不能得到Into Max(Anon.SomeString)
与Option Strict Off
工作,尽管有一些解决方法
您可以简单地在VB中使用'x.GetType()' - 我没有测试过我的答案代码,因此我的旧答案中出现了错误。但实际上这会产生运行时类型,它可能与使用'GetType(T)'得到的不同。最后,如果程序员不需要指定'Infer On',那么'Strict On'如果当然不需要这个工作,但总是应该一直开着,并且可以防止错误。 – 2010-03-22 07:56:53
我同意'Option Strict On'是很好的做法,但'x.GetType'不提供这里提出的问题的答案。我没有测试过它,但是通过'Infer Off'和'Strict Off',一个简单的'Dim query = From ...'示例可能会工作(尽管Linq查询的内容可能需要'Strict On '或'Infer On'正常工作),'query.GetType()'将返回匿名类型,而不是'Object',该查询将被声明为。 – 2010-03-23 03:57:14
感谢您的纠正;我改变了我的答案以反映这种调整。 MSDN文档的措辞很尴尬,似乎暗示“严格”是必需的,但他们实际上并没有这样说。 – 2010-03-23 16:56:35
对象在这个例子中为我工作
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
VB代码在这里使用了后期绑定。 (当你键入'j.'时,你不会有智能感知。)这不会对应于C#代码。 – 2012-02-14 03:55:29
所以我们说在for循环中使用循环变量时,在VB中没有关于var关键字的直接等价关系,例如,上面的j?这是我想要var的确切场景,因为我有一个使用匿名类型从LINQ返回的集合,所以如何获取元素?! – 2013-07-03 13:19:26
@AlanMacdonald只要使用'For Each j In ...',就可以推断出类型。 – 2013-08-05 17:46:53
- 1. 什么是C#“var”关键字的VB.NET等价物?
- 2. 什么是Java中C#'var'关键字的等价物?
- 3. VB.NET等价于C#代码
- 4. 什么是C#“is”关键字的VB.NET等价物?
- 5. VB.NET等价于C#的使用指令
- 6. Java中'where'fortran关键字的等价性?
- 7. c#关键字var慢编译?
- 8. C#var关键字的使用
- 9. C#var关键字的使用
- 10. C#代理和var关键字
- 11. 等价于Ceylon中的Java“static”关键字
- 12. C++等价于Tidy
- 13. C++等价于SerializeWithLengthPrefix
- 14. D中C#`readonly`关键字的等价物吗?
- 15. C#的任何VBNET等价的通用约束关键字?
- 16. 什么是C#'is'和'as'关键字的Java等价物?
- 17. 在C++中是否有等价于Dim/var?
- 18. 等价于C++中的C++
- 19. C#等价于C++ mem_fun?
- 20. VB.NET HashMap等价物
- 21. Objective-C等价于java字节[]
- 22. PHP等价于Objective-C的@“字符串”
- 23. PHP的Microtime(true)等价于VB.NET?
- 24. R:+ =(加上等于)和++(加上)等价于C++/c#/ java等等?
- 25. 什么是VB.NET相当于C#的默认关键字?
- 26. 新的'动态'C#4.0关键字是否弃用'var'关键字?
- 27. VB.NET等价于C#中的无名变量?
- 28. 关于使用关键字“Var”的范围的问题
- 29. GLSL ES等同于OpenGL GLSL'out'关键字?
- 30. TSQL等效于PostgreSQL“PERFORM”关键字?
恕我直言:虽然这是一个重复的问题,答案和评论下面提供有关使用'选项infer'和'详细选项严格“,比以前提出的问题。我更喜欢** THIS ** Q&A,与原版。 – ToolmakerSteve 2013-12-09 21:45:14