回答
忽略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