備註
此內容經Pearson Education, Inc.授權從架構設計指導方針:可重複使用 .NET 程式庫的慣例、習慣用語與範式 (第2版)轉載。 該版於2008年出版,該書自那以後已於 第三版全面修訂。 此頁面的某些資訊可能已過期。
本節說明 Framework 所提供的標準例外狀況及其使用方式的詳細數據。 清單絕不是詳盡的。 如需其他 Framework 例外狀況類型的使用方式,請參閱 .NET Framework 參考檔。
例外狀況和 SystemException
❌ 請勿擲回 System.Exception 或 System.SystemException。
❌ 除非您打算重新擲回,否則請勿在架構程式代碼中攔截 System.Exception 或 System.SystemException 。
❌ 避免攔截 System.Exception 或 System.SystemException,但最上層例外狀況處理程式除外。
ApplicationException
❌ 請勿擲回或衍生自 ApplicationException。
InvalidOperationException(操作無效異常)
如果物件處於不適當的狀態,請擲回 InvalidOperationException 。
ArgumentException、ArgumentNullException 和 ArgumentOutOfRangeException
如果傳遞不正確的參數給成員,請擲回 ArgumentException 或其子類型。 如果適用,偏好最衍生的例外狀況類型。
✔️ 當擲回 ParamName 的其中一個子類別時,請設定 ArgumentException 屬性。
這個屬性代表導致擲回例外狀況的參數名稱。 請注意,屬性可以使用其中一個建構函式多載來設定。
✔️ 請使用 value 作為屬性 setter 隱含值參數的名稱。
NullReferenceException、IndexOutOfRangeException 和 AccessViolationException
❌ 不允許公開呼叫的 API 明確或隱含地擲回 NullReferenceException、 AccessViolationException或 IndexOutOfRangeException。 這些例外狀況是由執行引擎保留和擲回,而且在大部分情況下表示錯誤。
執行引數檢查以避免拋出這些例外狀況。 拋出這些例外會公開方法的實作細節,而這些細節可能會隨時間改變。
StackOverflowException
❌ 請勿明確擲回 StackOverflowException。 例外應該只由 CLR 明確拋出。
❌ 請勿攔截 StackOverflowException。
撰寫 Managed 程式代碼幾乎不可能在任意堆疊溢位的情況下保持一致。 CLR 的未管理部分會使用探查將堆疊溢位移至定義完善的位置,而不是通過從任意堆疊溢位中回退,以保持一致。
記憶體不足例外
❌ 請勿明確擲回 OutOfMemoryException。 此例外狀況僅由 CLR 基礎結構拋出。
ComException、SEHException 和 ExecutionEngineException
❌ 請勿明確擲回 COMException、ExecutionEngineException和 SEHException。 這些例外狀況只會由 CLR 基礎結構拋出。
© 2005年、2009年Microsoft公司部分。 保留所有權利。
經 Pearson Education, Inc. 許可重新刊登自 Krzysztof Cwalina 和 Brad Abrams 所著的 架構設計指導方針: 可重複使用的 .NET 程式庫慣例、慣用語和模式,第 2 版,2008 年 10 月 22 日由 Addison-Wesley Professional 發行,作為 Microsoft Windows 開發系列的一部分。