当InnerException为null时,将引发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评估为truefalse。这全都与运算符优先级有关,这就是为什么第二个由于括号(())而可以正常工作的原因。

See this reference for Operator Precedence。在等于+运算符之前先评估==运算符。

关于c# - 为什么这会引发空引用异常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8316581/

10-11 02:04