2010-07-09 37 views
14

最近在以前的项目中,我遇到了VB.NET和C#之间的一个特殊区别。Nothing!= null - 或者是否?

考虑其下面的C#表达式:

null <= 2 

这个表达式这正是我所期望的。 然后相应的VB.NET表达:

Nothing <= 2 

我很惊讶地得知,这实际上表达的计算结果为真

这似乎是两种语言之间一个相当基本的设计决策,它肯定被我出去了。

有人能告诉我为什么吗? 是空和没有一个和相同? 如果是这样,他们为什么表现不同?

+4

null null = 2在C#中产生编译时警告,并且不会将与此操作对应的IL发送到输出程序集。 – 2010-07-09 12:33:58

+0

在LINQPAD中尝试一个表达式 - 想像一下null实际上是一个int?谁的价值恰好为零。 – 2010-07-09 12:37:10

+0

相关问题(虽然不完全一样):http://stackoverflow.com/questions/2776902/why-can-you-assign-nothing-to-an-integer-in-vb-net – 2010-07-09 12:37:39

回答

30

Nothing在VB中评估为给定类型的默认值。 (有关详细信息,请参见this link。)

对于整数比较(编译器将从右边的操作数假定),Nothing因此将为00 <= 2对于更明显的原因是正确的:-)

+2

中那样比较'null'还值得一提的是,与Is和IsNot运算符结合使用时Nothing也用于空检查。 – 2010-07-09 12:33:31

+2

完整性:编译器与C#代码是什么? '(object)null'不允许与一个整数进行比较,'Int32'不能为空...? – 2010-07-09 12:36:22

+0

当我正在寻找答案时,你击败了我。你也得到了同样的链接:P – 2010-07-09 12:39:50

相关问题