最近在以前的项目中,我遇到了VB.NET和C#之间的一个特殊区别。Nothing!= null - 或者是否?
考虑其下面的C#表达式:
null <= 2
这个表达式假这正是我所期望的。 然后相应的VB.NET表达:
Nothing <= 2
我很惊讶地得知,这实际上表达的计算结果为真
这似乎是两种语言之间一个相当基本的设计决策,它肯定被我出去了。
有人能告诉我为什么吗? 是空和没有一个和相同? 如果是这样,他们为什么表现不同?
最近在以前的项目中,我遇到了VB.NET和C#之间的一个特殊区别。Nothing!= null - 或者是否?
考虑其下面的C#表达式:
null <= 2
这个表达式假这正是我所期望的。 然后相应的VB.NET表达:
Nothing <= 2
我很惊讶地得知,这实际上表达的计算结果为真
这似乎是两种语言之间一个相当基本的设计决策,它肯定被我出去了。
有人能告诉我为什么吗? 是空和没有一个和相同? 如果是这样,他们为什么表现不同?
Nothing
在VB中评估为给定类型的默认值。 (有关详细信息,请参见this link。)
对于整数比较(编译器将从右边的操作数假定),Nothing
因此将为0
。 0 <= 2
对于更明显的原因是正确的:-)
中那样比较'null'还值得一提的是,与Is和IsNot运算符结合使用时Nothing也用于空检查。 – 2010-07-09 12:33:31
完整性:编译器与C#代码是什么? '(object)null'不允许与一个整数进行比较,'Int32'不能为空...? – 2010-07-09 12:36:22
当我正在寻找答案时,你击败了我。你也得到了同样的链接:P – 2010-07-09 12:39:50
null null = 2在C#中产生编译时警告,并且不会将与此操作对应的IL发送到输出程序集。 – 2010-07-09 12:33:58
在LINQPAD中尝试一个表达式 - 想像一下null实际上是一个int?谁的价值恰好为零。 – 2010-07-09 12:37:10
相关问题(虽然不完全一样):http://stackoverflow.com/questions/2776902/why-can-you-assign-nothing-to-an-integer-in-vb-net – 2010-07-09 12:37:39