使用標準例外狀況類型

注意

此內容是由 Pearson Education, Inc. 授權轉載自架構設計指導方針:可重複使用 .NET 程式庫的慣例、慣用語和模式,第 2 版。 該版於 2008 年出版,該書自那以後已於第三版進行了全面修訂。 此頁面上的某些資訊可能已過期。

本節說明 Framework 所提供的標準例外狀況及其使用方式的詳細資料。 清單並不詳盡。 如需其他 Framework 例外狀況型別的使用方式,請參閱 .NET Framework 參考文件。

例外狀況和 SystemException

❌ 請勿擲回 System.ExceptionSystem.SystemException

❌ 除非您想要重新擲回,否則請勿攔截架構程式碼中的 System.ExceptionSystem.SystemException

❌ 請避免攔截 System.ExceptionSystem.SystemException,但最上層例外處理常式除外。

ApplicationException

❌ 請勿擲回或衍生自 ApplicationException

InvalidOperationException

✔️ 如果物件處於不適當的狀態,請擲回 InvalidOperationException

ArgumentException、ArgumentNullException 和 ArgumentOutOfRangeException

✔️ 如果錯誤引數傳遞至成員,請擲回 ArgumentException 或其中一個子型別。 如果適用,偏好使用最常衍生的例外狀況型別。

✔️ 擲回 ArgumentException 的其中一個子類別時,請設定 ParamName 屬性。

這個屬性代表造成擲回例外狀況的參數名稱。 請注意,可以使用其中一個建構函式多載來設定屬性。

✔️ 請針對屬性 setter 的隱含值參數名稱使用 value

NullReferenceException、IndexOutOfRangeException 和 AccessViolationException

❌ 請勿允許可公開呼叫的 API 明確或隱含地擲回 NullReferenceExceptionAccessViolationExceptionIndexOutOfRangeException。 這些例外狀況是由執行引擎保留並擲回,在大部分情況下表示錯誤。

執行引數檢查以避免擲回這些例外狀況。 擲回這些例外狀況會公開方法的實作詳細資料,而這些實作詳細資料可能會隨著時間而變更。

StackOverflowException

❌ 請勿明確擲回 StackOverflowException。 例外狀況應該只由 CLR 明確擲回。

❌ 請勿攔截 StackOverflowException

幾乎不可能撰寫在任意堆疊溢位時維持一致的受控程式碼。 CLR 的非受控部分會藉由使用探查將堆疊溢位移至妥善定義的位置來保持一致,而不是從任意堆疊溢位退出。

OutOfMemoryException

❌ 請勿明確擲回 OutOfMemoryException。 此例外狀況僅供 CLR 基礎結構擲回。

ComException、SEHException 和 ExecutionEngineException

❌ 請勿明確擲回 COMExceptionExecutionEngineExceptionSEHException。 這些例外狀況只會由 CLR 基礎結構擲回。

Portions © 2005, 2009 Microsoft Corporation. 著作權所有,並保留一切權利。

獲 Pearson Education, Inc. 的授權再版,從 Krzysztof Cwalina 和 Brad Abrams 撰寫,並在 2008 年 10 月 22 日由 Addison-Wesley Professional 出版,作為 Microsoft Windows Development Series 一部份的 Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition 節錄。

另請參閱