2010-02-08 77 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