CA1032: 標準例外コンストラクターを実装します

プロパティ
ルール ID CA1032
Title 標準例外コンストラクターを実装します
[カテゴリ] デザイン
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 いいえ

原因

ある型によって System.Exception が拡張されるが、一部の必須コンストラクターが宣言されません。

規則の説明

例外型では、次の 2 つの public コンストラクターを実装する必要があります。

  • public NewException()

  • public NewException(string)

  • public NewException(string, Exception)

コンストラクターを完全に宣言していないと、例外を正しく処理するのが困難になります。 たとえば、シグネチャ NewException(string, Exception) を持つコンストラクターは、他の例外によって引き起こされる例外を作成する目的で使用されます。 このコンストラクターがないと、内部 (入れ子にされた) 例外が含まれるカスタム例外のインスタンスを作成し、スローできません。これは、このような状況でマネージド コードによって行われるべきことです。

詳細については、「CA2229: シリアル化コンストラクターを実装します」を参照してください。

違反の修正方法

この規則違反を修正するには、足りないコンストラクターを例外に追加し、アクセシビリティが正しくなるようにします。

どのようなときに警告を抑制するか

public コンストラクターに別のアクセス レベルを使用することで違反が引き起こされるとき、この規則からの警告を非表示にしても問題ありません。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA1032
// The code that's violating the rule is on this line.
#pragma warning restore CA1032

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA1032.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。

次の例には、この規則に違反する例外の型と、正しく実装された例外の型が含まれています。

// Violates rule ImplementStandardExceptionConstructors.
public class BadException : Exception
{
    public BadException()
    {
        // Add any type-specific logic, and supply the default message.
    }
}

[Serializable()]
public class GoodException : Exception
{
    public GoodException()
    {
        // Add any type-specific logic, and supply the default message.
    }

    public GoodException(string message) : base(message)
    {
        // Add any type-specific logic.
    }

    public GoodException(string message, Exception innerException) :
       base(message, innerException)
    {
        // Add any type-specific logic for inner exceptions.
    }
}

関連項目

CA2229: シリアル化コンストラクターを実装します