[英]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.