我正在清理一些遺留代碼,並找到明確拋出NullReferenceException
(例如,在檢查某個類的某些屬性是否爲空或檢查配置時)的方法。由於這種類型的異常是由CLR在空引用的情況下引發的,所以這對於顯式拋出的應用程序來說似乎是一個很差的選擇。明確拋出NullReferenceException的原因是什麼?
我的問題是 - 有沒有任何原因NullReferenceException
將是一個很好的選擇,從一個例外顯式拋出代碼?
我正在清理一些遺留代碼,並找到明確拋出NullReferenceException
(例如,在檢查某個類的某些屬性是否爲空或檢查配置時)的方法。由於這種類型的異常是由CLR在空引用的情況下引發的,所以這對於顯式拋出的應用程序來說似乎是一個很差的選擇。明確拋出NullReferenceException的原因是什麼?
我的問題是 - 有沒有任何原因NullReferenceException
將是一個很好的選擇,從一個例外顯式拋出代碼?
的文檔NullReferenceException
意味着,你不應該從應用程序把它:
注意,應用程序拋出ArgumentNullException例外,而不是這裏討論的NullReferenceException異常。
我相信我已經看到過別處的指導(目前找不到任何東西),您應該避免拋出運行時拋出的異常類型(儘管我即將鏈接到顯示運行時拋出一個「應用程序」除外)
如果你的方法內檢查性能,在繼續之前,這聽起來像你可能想用InvalidOperationException來替代它們:
出現InvalidOperationException是用於調用方法失敗的原因是由於無效參數以外的原因造成的。
處於方法調用的錯誤狀態聽起來像它符合此定義。
我可以在invision senarios中明確地拋出它是有意義的。首先想到的是在CLR遇到異常之前完成大量其他處理之前檢查屬性。
不應該ArgumentNullException應該用於這些場景的屬性? – DaveHogan
我假設如果代碼沒有檢查你會得到一個NullReferenceException(NRE)任何方式,所以沒有。然而,我沒有看到有一個應用程序消息沒有問題,它可以更好地解釋具有內部異常類型NRE或ArgumentExeption的特定函數的調用機制,因爲這是導致問題的下屬問題。
不,沒有理由拋出NullReferenceException
。
你總是有一些關於錯誤原因的更多信息,所以你應該拋出一個異常傳達的信息。
例如,如果您在不允許的情況下獲取空引用作爲參數,則會拋出ArgumentException
或ArgumentNullException
。
沒有,NullReferenceException
應該只由框架拋出。 ArgumentNullException
或InvalidOperationException
是有效的選擇。
不應在這種情況下使用[NotSupportedException異常](http://msdn.microsoft.com/en-us/library/system.notsupportedexception.aspx):「對於場景中有時可能爲對象來執行所請求操作,並且對象狀態決定是否可以執行操作,請參閱InvalidOperationException。 –
已更新........ – devdigital
大概不會,我們檢查參數,有時我們拋出ArgumentNullException但這是良好的參數和參數,不知道... –