當你發現一個錯誤,你可以重新打包它,然後拋出另一個錯誤,在最基本的層面上,你可能只是增加更多的數據 - 但是,從你的建議,你也可以替換一般錯誤有一個自定義錯誤,雖然它不會克服你從組件中獲得的響應的限制,但會讓代碼進一步提升調用堆棧的機會,以更恰當地作出響應。
在短短的最基本的方式將信息添加條款
所以 - 通過拋出一個新的異常與一些額外的文本,同時仍通過原有的例外:現在
catch (Exception ex)
{
throw new Exception("This is more about where the exception occurred", ex);
}
,如果要定義自己的自定義組件異常您將new Exception
更改爲新的ComponentSpecificException
將必要的數據添加到構造函數中,但從未忘記設置內部異常。例外情況還有一個關鍵值對的數據收集,您可以在其中插入更多信息(通過創建例外,添加數據然後執行拋出)。
這些都是相當通用的 - 從那裏開始工作,在那裏你不一定能預見到你必須處理的所有異常,不要嘗試 - 設置日誌記錄,以便知道何時有一個通用異常即一個觸及最終捕獲 - 然後隨着時間的推移,在泛型之上添加異常特定的捕獲以提供更適當的響應,或者至少將錯誤打包爲較不常規的自定義異常。
不知道我是很好的解釋 - 但觀念是其難以預見每一個可能的錯誤,你想有發展以系統的方式您的應用程序,你發現新的異常的策略。
看起來像一個完善的解決方案。 – 2010-11-15 17:18:48
組件是否將所有異常重新打包爲System.Exception?如果不是,你可以用正常的漁獲量來處理它。如果是...祝你好運。 – asawyer 2010-11-15 17:21:38
只是不。你不知道例外有多嚴重。 – 2010-11-15 18:32:42