簡體   English   中英

為什么這會引發空引用異常?

[英]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 == nulltruefalse 這都是關於運算符優先級的 ,這就是為什么第二個工作正常由於括號( () )。

有關操作員優先順序,請參閱此參考 在等於==運算符之前計算+運算符。

這是由於運算符優先級,在這種情況下, +運算符的優先級高於==運算符,因此您需要使用括號來覆蓋默認的優先順序,以便以正確的順序執行代碼。

您可以在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM