我期望以下几行代码抛出一个异常,因为我正在访问一个可归零变量的Value属性,该变量被赋值为null.但是,当我执行以下操作时,我没有任何异常:
int? x=null; Console.WriteLine(x.Value==null);
但当我这样做时:
Console.WriteLine(x.Value);
我确实得到了一个例外,正如可以预料的那样.
但是访问x.Value的两种方式有什么区别?为什么我在第一种情况下没有例外?毕竟两段代码都试图访问x.Value属性.
注意:我在www.compileonline.com网站上运行上面的代码,顺便说一句.不确定尝试使用Visual Studio编译器会产生不同的结果,但我目前无法访问Visual Studio.
TIA.
解决方法
使用
website compile online指出时,单声道编译会对代码进行重写/优化:
using System.IO; using System; class Program { static void Main() { int? x=null; Console.WriteLine(x.Value==null); //-> Console.WriteLine(false); } }
Compiling the source code….
$mcs main.cs -out:demo.exe 2>&1
main.cs(9,38): warning CS0472: The result of comparing value type
int' with null is
false’Compilation succeeded – 1 warning(s)
Executing the program….
$mono demo.exe
False
警告CS0472告诉您,这是他们正在使用的在线/单声道编译器中的错误.