CA2201:予約された例外の種類を発生させません
プロパティ | 値 |
---|---|
ルール ID | CA2201 |
Title | 予約された例外の種類を発生させません |
[カテゴリ] | 使用方法 |
修正が中断ありか中断なしか | あり |
.NET 8 では既定で有効 | いいえ |
原因
メソッドによって、一般的すぎる、またはランタイムによって予約されている種類の例外が発生します。
規則の説明
次の例外の種類は、一般的すぎて、ユーザーに十分な情報を提供できません。
次の例外の種類は予約されており、共通言語ランタイムによってのみスローされる必要があります。
- 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 から派生する独自のタイプを作成することを検討し、それをスローします。
違反の修正方法
この規則の違反を修正するには、スローされる例外の型を、予約済みの型ではない特定の型に変更します。
どのようなときに警告を抑制するか
この規則による警告は抑制しないでください。
関連規則
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET