空值和重载的等于运算符之间的奇怪行为

时间:2011-08-18 20:44:59

标签: c# comparison-operators

  

可能重复:
  C# okay with comparing value types to null

为什么值类型为DateTime和等于运算符重载的Decimal可以与空值进行比较?

我一直认为值类型是非nullables值,但我可以编写以下代码:

DateTime dateTime = DateTime();

if(dateTime == null)
    //do something

编译不会抛出异常,但比较始终为false。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

这是因为双方都可以隐式转换为DateTime?。这是一个不太理想的角落案例,基本上是:(

某些个案例中,它会发出警告,但不是全部(例如,不在此处)。

例如,使用int

int x = 5;

if(x == null)
{
    Console.WriteLine();
}

你会收到这个警告:

  

警告CS0472:表达式的结果始终为“false”,因为类型“int”的值永远不等于“int”类型的“null”