【发布时间】:2014-01-20 03:13:52
【问题描述】:
我预计以下代码行会引发异常,因为我正在访问一个赋值为null 的可为空变量的Value 属性。但是,当我执行以下操作时,我没有得到任何异常:
int? x=null;
Console.WriteLine(x.Value==null);
但是当我这样做时:
Console.WriteLine(x.Value);
不出所料,我确实遇到了异常。
但是这两种访问x.Value的方式有什么区别呢?为什么在第一种情况下我没有得到异常?这两段代码毕竟都在尝试访问 x.Value 属性。
注意:我在www.compileonline.com 网站上运行上述代码,顺便说一句。不确定尝试使用 Visual Studio 编译器是否会产生不同的结果,但我目前无法访问 Visual Studio。
TIA。
【问题讨论】:
-
控制台.WriteLine(x.Value==null);也会抛出 Invalid operationexception。
-
两者都抛出异常。
-
compileonline.com 使用 Mono 编译器,而不是 Microsoft 的。我想你可能在那个编译器中发现了一个错误。
-
看来您在在线编译器中发现了一个错误。
-
我得到:警告为错误:表达式的结果始终为“假”,因为“int”类型的值永远不等于“int”类型的“null”?所以也许它是一种优化。