2010-02-08 78 views
6

現在,作爲一名C#程序員,我知道泛型非常棒。 然而,在一些VB.NET涉足的時候,我發現以下不導致編譯器錯誤:VB.NET中的泛型

Dim instance As List(Of Integer) 
instance.Add(True) 

這是爲什麼?我知道你不需要在VB.NET中投射,但是我認爲這會殺死使用泛型的主要原因 - 類型安全。

編輯:我沒有嚴格的選項,因爲這不是一個真正的編程練習,只是我在理論上看看VB.NET。這是一個理論上的問題,因爲我期待它即使在嚴格選項關閉的情況下也會導致編譯器錯誤,就像泛型類型的功能一樣。

回答

10

沒有Option Strict On,VB.NET很樂意隱式地將Boolean轉換爲Integer。我強烈建議(特別是來自C#背景),您爲您的VB.NET工作創建Option Strict On默認值。

您可以在Visual Studio中做到這一點Tools | Options | Projects and Solutions | VB Defaults

編輯欲瞭解更多關於VB(經典)'寬鬆'態度的類型轉換,谷歌'邪惡類型強制'。我們這些試圖在VB(經典)中做好工作的人不得不在這個惡魔中搏鬥......

+1

+1這是對VB中的邪惡類型強制的最初和最好的批評,寫於1995年,當它被引入時,今天仍然相關。 http://vb.mvps.org/articles/pt199511.pdf – MarkJ 2010-02-09 18:07:43

0

VB.NET在函數調用站點進行轉換。列表(整數)仍然存儲一個整數(-1,它是整數值True)

+0

無論誰想出用_negative_數值表示_positive_真值,都應該對他的頭部進行檢查。 – Rik 2010-02-08 14:45:55

+0

@Rik ... -1全部位高。 False爲0,因爲所有位都關閉。 – 2010-02-08 14:55:50

+0

@Mthethew Whited:無可否認,這是有道理的。不過,我更喜歡0/1的會議。 – Rik 2010-02-08 16:19:36