CA2244: インデックス付き要素の初期化を重複させません

プロパティ
ルール ID CA2244
Title インデックス付き要素の初期化を重複させません
[カテゴリ] 使用方法
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 提案として

原因

オブジェクト初期化子に、定数インデックスが同じインデックス付き要素の初期化子が複数あります。 最後の初期化子を除くすべての初期化子は冗長です。

規則の説明

オブジェクト初期化子を使用すると、オブジェクトの作成時にアクセスできるフィールドまたはプロパティに、コンストラクターを呼び出して代入ステートメントを使用しなくても、値を割り当てることができます。

オブジェクト初期化子のインデックス付き要素の初期化子では、一意の要素を初期化する必要があります。 インデックスが重複すると、前の要素初期化が上書きされます。

違反の修正方法

違反を修正するには、後続のいずれかの要素初期化子で上書きされた、重複するインデックス付き要素初期化子をすべて削除します。 たとえば、次のコード スニペットで、規則の違反と考えられるいくつかの修正方法を示しています。

using System.Collections.Generic;

class C
{
    public void M()
    {
        var dictionary = new Dictionary<int, int>
        {
            [1] = 1, // CA2244
            [2] = 2,
            [1] = 3
        };
    }
}
using System.Collections.Generic;

class C
{
    public void M()
    {
        var dictionary = new Dictionary<int, int>
        {
            [2] = 2,
            [1] = 3
        };
    }
}
using System.Collections.Generic;

class C
{
    public void M()
    {
        var dictionary = new Dictionary<int, int>
        {
            [1] = 1,
            [2] = 2
        };
    }
}

ヒント

Visual Studio では、この規則に対するコード修正を使用できます。 これを使用するには、違反にカーソルを置き、Ctrl+. (ピリオド) を押します。 表示されたオプションの一覧から [Remove redundant element initializer](重複する要素初期化子を削除する) を選択します。

Code fix for CA2244 - Remove redundant element initializer

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

この規則の違反は抑制しないでください。

関連項目