我今天遇到了这个问题,不知道为什么C#编译器没有抛出错误。
Int32 x = 1;
if (x == null)
{
Console.WriteLine("What the?");
}
我对x怎么可能为null感到困惑。特别是由于此分配肯定会引发编译器错误:
Int32 x = null;
x是否有可能成为null,Microsoft是否只是决定不将此检查放入编译器,还是完全错过了?
更新:在弄乱编写本文的代码之后,突然编译器提出了警告,该表达式永远不会为真。现在我真的迷路了。我将对象放到一个类中,现在警告已经消失了,但还有一个问题,值类型最终是否可以为null。
public class Test
{
public DateTime ADate = DateTime.Now;
public Test ()
{
Test test = new Test();
if (test.ADate == null)
{
Console.WriteLine("What the?");
}
}
}
if (1 == 2)
。执行代码路径分析不是编译器的工作;这就是静态分析工具和单元测试的目的。