以下例外情況可能是非常相似:我應該處理/處理這些異常嗎?
ArgumentException
ArgumentNullException
InvalidOperationException
ObjectDisposedException
。- 我應該扔在我的代碼?
- 我應該追上他們?
InvalidOperationException
是一個非常模糊的和廣泛的例外,因爲它意味着一個方法試圖東西是不可能的,由於狀態(例如啓動一個雙贏SVC這可能不是啓動的)。
以下例外情況可能是非常相似:我應該處理/處理這些異常嗎?
ArgumentException
ArgumentNullException
InvalidOperationException
ObjectDisposedException
。
InvalidOperationException
是一個非常模糊的和廣泛的例外,因爲它意味着一個方法試圖東西是不可能的,由於狀態(例如啓動一個雙贏SVC這可能不是啓動的)。這一切都取決於你在做什麼。除了ObjectDisposedException,這是你應該留給運行時間的東西,所有這些都可以接受,以適當的情況。
你希望其中的一些通過各種手段再發生,抓住他們,並適當地處理這種情況。
作爲一般規則,你應該拋出的最具體的異常就可以了。這爲消費者提供了處理/理解異常的最佳機會。
因此,例如,
InvalidOperationException是相當寬泛的,並且在更多特定選項不適合時經常用作catchall。
大部分的自制方法的參數驗證(通常命名爲喜歡的後衛,參數,等等)都在參數無效的情況下拋出這些異常:
我相信MSDN有何時拋出這樣的例外非常詳細的描述,
ArgumentException在調用方法時被拋出,並且至少有一個 傳遞的參數不符合被調用方法的參數說明 。的ArgumentException的所有實例應進行描述無效參數一個 有意義的錯誤消息,以及用於 參數值的預期範圍。
ArgumentNullException當一個方法被調用並且至少有一個 傳遞參數爲空,但不應該爲空。
InvalidOperationException異常在的情況下使用時的失敗調用 一個方法是由比無效的參數等原因引起的。對於 例如,InvalidOperationException異常是通過拋出:
- 的MoveNext如果一個集合中的對象創建 枚舉之後被修改。
- GetString如果在方法調用之前關閉資源集是 。
是否有可能您的代碼會拋出這些異常?如果是的話就抓住他們。一些代碼會很有用 – skyfoot
除非你期待他們,並且你知道*特別是*如何處理他們,否則不要捕捉任何異常。如果不是,不要抓住它們。讓他們泡上堆棧。這是他們設計的目的。並且沒有什麼時候你應該捕獲ObjectDisposedException。這表明您的程序中存在一個錯誤;你想解決這個問題,而不是抓住它。 –