[英]Why does this throw a null reference exception?
当InnerException为null时,这将抛出一个空引用异常。
String s = " inner exception: " + e.InnerException == null ? "None" : e.InnerException.Message;
但这不会:
String s = " inner exception: " + (e.InnerException == null ? "None" : e.InnerException.Message);
以上两种都很好。 我无法弄清楚前者试图做什么会导致它评估e.InnerException.Message
。 为什么它们不相同?
这是因为您的第一个语句正在评估" inner exception: " + e.InnerException == null
为true
或false
。 这都是关于运算符优先级的 ,这就是为什么第二个工作正常由于括号( (
和)
)。
有关操作员优先顺序,请参阅此参考 。 在等于==
运算符之前计算+
运算符。
这是由于运算符优先级,在这种情况下, +
运算符的优先级高于==
运算符,因此您需要使用括号来覆盖默认的优先顺序,以便以正确的顺序执行代码。
您可以在C#语言规范中阅读所有相关内容:
当表达式包含多个运算符时,运算符的优先级控制各个运算符的计算顺序。
这个:
String s = " inner exception: " + e.InnerException == null ? "None" : e.InnerException.Message;
可能正在评估如下:
String s = (" inner exception: " + e.InnerException) == null ? "None" : e.InnerException.Message;
经营顺序:
String s = " inner exception: " + e.InnerException == null ? "None" : e.InnerException.Message;
被评估为(" inner exception: " + e.InnerException) == null ?
它不是。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.