什么都没有!= null - 或者是吗?

Gav*_*orn 14 .net c# vb.net clr

最近在之前的一个项目中,我发现了VB.NET和C#之间的一个特殊区别.

考虑以下C#表达式:

null <= 2
Run Code Online (Sandbox Code Playgroud)

此表达式的计算结果为False,这正是我所期望的.然后是相应的VB.NET表达式:

Nothing <= 2
Run Code Online (Sandbox Code Playgroud)

我很惊讶地发现这个表达式实际上是评估为True

这似乎是两种语言之间相当基本的设计决定,它确实让我感到震惊.

有人能告诉我为什么吗?是null和Nothing是一样的吗?如果是这样,他们为什么表现不同?

Dan*_*zey 30

Nothing在VB中计算为给定类型的默认值.(有关详细信息,请参阅此链接.)

对于整数比较(编译器将从右手操作数假设),Nothing将是0. 0 <= 2是因为更明显的原因:-)

  • 还值得一提的是,当与Is和IsNot运算符结合使用时,Nothing也用于空值检查. (2认同)
  • 为了完整性:编译器使用C#代码是什么?`(object)null`不允许与整数进行比较,`Int32`不能为null ...? (2认同)