CA2201: 請勿引發保留的例外類型

屬性
規則識別碼 CA2201
職稱 不要引發保留的例外狀況類型
類別 使用方式
修正是造成中斷還是不中斷 中斷
在 .NET 10 中預設啟用
適用語言 C# 與 Visual Basic

原因

方法會引發過於一般或被執行時期保留的例外狀況類型。

規則描述

下列例外狀況類型太一般,無法為使用者提供足夠的資訊:

下列例外狀況類型是保留的,而且應該只由 Common Language Runtime 擲回:

不要拋出一般例外狀況

如果您在連結庫或架構中擲回一般例外狀況類型,例如 ExceptionSystemException,它會強制取用者攔截所有例外狀況,包括不知道如何處理的未知例外狀況。

相反地,請拋出已存在於架構中的衍生型別,或者創建衍生自 Exception 的自有型別。

拋出特定例外狀況

下表顯示針對各種無效自變數類型擲回的例外狀況,包括 屬性存取 set 子中的 value 參數。

無效引數 例外狀況
null 參考 ArgumentNullException
超出允許的值範圍(例如集合或清單的索引) ArgumentOutOfRangeException
無效 enum 的值 InvalidEnumArgumentException
包含不符合方法參數規格的格式(例如的 ToString(String)格式字串) FormatException
否則無效 ArgumentException

下表顯示針對各種無效作業類型,應擲回哪些例外狀況。

作業無效 例外狀況
作業對物件的目前狀態無效。 InvalidOperationException
作業會在已處置的物件上執行。 ObjectDisposedException
此操作不受支援(例如,在為讀取而開啟的數據流中被覆寫的 Stream.Write 中)。 NotSupportedException
轉換會導致溢位(例如在明確的轉換運算元多載中)。 OverflowException

針對所有其他情況,請考慮建立一個衍生自 Exception 的您自己的類別,並擲回它。

如何修正違規

若要修正此規則違規,請將擲回的例外狀況類型變更為不屬於保留類型的一個特定類型。

Example

// This code violates the rule.
throw new Exception();
throw new NullReferenceException();
throw new IndexOutOfRangeException();
// ...

// This code satisfies the rule.
throw new ArgumentException();
throw new ArgumentNullException();
throw new InvalidOperationException();
// ...

// A minimal implementation of inheritance from Exception
public class CustomException : Exception { }

// Or create your own type that derives from Exception
// This code satisfies the rule too.
throw new CustomException();

隱藏警告的時機

請勿隱藏此規則的警告。