CA2201:不要引發保留的例外狀況類型
屬性 | 值 |
---|---|
規則識別碼 | CA2201 |
標題 | 不要引發保留的例外狀況類型 |
類別 | 使用方式 |
修正程式是中斷或非中斷 | 中斷 |
預設在 .NET 8 中啟用 | No |
原因
方法會引發太一般或運行時間保留的例外狀況類型。
檔案描述
下列例外狀況類型太一般,無法為使用者提供足夠的資訊:
下列例外狀況類型是保留的,而且應該只由 Common Language Runtime 擲回:
- System.AccessViolationException
- System.ExecutionEngineException
- System.IndexOutOfRangeException
- System.NullReferenceException
- System.OutOfMemoryException
- System.Runtime.InteropServices.COMException
- System.Runtime.InteropServices.ExternalException
- System.Runtime.InteropServices.SEHException
- System.StackOverflowException
不要擲回一般例外狀況
如果您在連結庫或架構中擲回一般例外狀況類型,例如 Exception 或 SystemException,它會強制取用者攔截所有例外狀況,包括不知道如何處理的未知例外狀況。
相反地,請擲回已存在於架構中的衍生型別,或建立衍生自 Exception的自有型別。
擲回特定例外狀況
下表顯示針對各種無效自變數類型擲回的例外狀況,包括 屬性存取 set
子中的 value 參數。
無效引數 | 例外狀況 |
---|---|
null 參考 |
ArgumentNullException |
超出允許的值範圍(例如集合或清單的索引) | ArgumentOutOfRangeException |
無效 enum 的值 |
InvalidEnumArgumentException |
包含不符合方法參數規格的格式(例如的 ToString(String) 格式字串) |
FormatException |
否則無效 | ArgumentException |
下表顯示針對各種無效作業類型擲回的例外狀況。
作業無效 | 例外狀況 |
---|---|
作業對物件的目前狀態無效。 | InvalidOperationException |
作業會在已處置的物件上執行。 | ObjectDisposedException |
不支持作業(例如,在開啟以供讀取的數據流中覆寫 Stream.Write )。 |
NotSupportedException |
轉換會導致溢位(例如在明確的轉換運算元多載中)。 | OverflowException |
針對所有其他情況,請考慮建立衍生自 Exception 並擲回的您自己的類型。
如何修正違規
若要修正此規則的違規,請將擲回例外狀況的類型變更為非其中一個保留類型的特定類型。
隱藏警告的時機
請勿隱藏此規則的警告。