次の方法で共有


CA2207: 値型の静的フィールドをインラインで初期化する

プロパティ
ルール ID CA2207
Title 値型のスタティックフィールドはインラインで初期化されます
[カテゴリ] 使用方法
修正が破壊的か非破壊的か なし
.NET 10 で既定で有効 いいえ
該当する言語 C# と Visual Basic

原因

値型で明示的な静的コンストラクターを宣言しています。

規則の説明

値型が宣言されると、既定の初期化が行われ、すべての値型フィールドはゼロに設定され、すべての参照型フィールドは null (Visual Basic では Nothing) に設定されます。 明示的な静的コンストラクターは、型のインスタンス コンストラクターまたは静的メンバーが呼び出される前に実行されることのみが保証されます。 したがって、インスタンス コンストラクターを呼び出さずに型が作成された場合、静的コンストラクターの実行は保証されません。

すべての静的データがインラインで初期化され、明示的な静的コンストラクターが宣言されていない場合、C# および Visual Basic コンパイラは CIL クラス定義に beforefieldinit フラグを追加します。 コンパイラでは、静的な初期化コードを含むプライベート静的コンストラクターも追加します。 このプライベート静的コンストラクターは、型の静的フィールドがアクセスされる前に実行されることが保証されています。

違反の修正方法

この規則の違反を修正するには、すべての静的データを宣言時に初期化し、静的コンストラクターを削除します。

Example

// This struct violates the rule.
struct BadStruct
{
    private static readonly int s_first;
    private static readonly int s_second;

    static BadStruct()
    {
        s_first = 1;
        s_second = 2;
    }

    // ...
}

// This struct satisfies the rule.
struct GoodStruct
{
    private static readonly int s_first = 1;
    private static readonly int s_second = 2;

    // ...
}

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

この規則による警告は抑制しないでください。

CA1810:参照型の静的フィールドをインラインで初期化します