为什么这会引发空引用异常?

Eri*_*rix 9 c# conditional-operator nullreferenceexception

当InnerException为null时,这将抛出一个空引用异常.

String s = " inner exception: " + e.InnerException == null ? "None" : e.InnerException.Message;
Run Code Online (Sandbox Code Playgroud)

但这不会:

String s = " inner exception: " + (e.InnerException == null ? "None" : e.InnerException.Message);
Run Code Online (Sandbox Code Playgroud)

以上两种都很好.我无法弄清楚前者试图做什么会导致它进行评估e.InnerException.Message.为什么它们不相同?

小智 22

这是因为您的第一个声明正在评估" inner exception: " + e.InnerException == nulltruefalse.这都是关于运算符优先级的,这就是为什么第二个工作正常由于括号(()).

有关操作员优先顺序,请参阅此参考.在+平等的运营商之前评估==操作.