我今天碰到了这个,并且不知道为什么C#编译器没有抛出错误.
Int32 x = 1;
if (x == null)
{
Console.WriteLine("What the?");
}
Run Code Online (Sandbox Code Playgroud)
我很困惑x怎么可能是null.特别是因为这个赋值肯定会抛出编译器错误:
Int32 x = null;
Run Code Online (Sandbox Code Playgroud)
是否有可能x变为null,微软是否决定不将此检查放入编译器,还是完全错过了?
更新:在编写了这篇文章的代码后,编译器突然发出一个警告,表达式永远不会成立.现在我真的迷路了.我把对象放到一个类中,现在警告已经消失,但是留下了问题,值类型最终是否为null.
public class Test
{
public DateTime ADate = DateTime.Now;
public Test ()
{
Test test = new Test();
if (test.ADate == null)
{
Console.WriteLine("What the?");
}
}
}
Run Code Online (Sandbox Code Playgroud) 为什么我允许Nothing在VB.NET中分配值类型:
Dim x as Integer = Nothing
Run Code Online (Sandbox Code Playgroud)
但我不允许null在C#中分配:
int x = null;
Run Code Online (Sandbox Code Playgroud) C#NULL与vb.net有什么不同?
Console.WriteLine(Nothing = "") => True
Run Code Online (Sandbox Code Playgroud)
VS
Console.WriteLine(null==""); => False
Run Code Online (Sandbox Code Playgroud)
我的理解是,这两个null和Nothing是一样的.但上面的代码清楚地解释了它不是.
nullVB.NET 中C#的等价物是什么?