CA2244:不要复制已索引的元素初始值设定项

属性
规则 ID CA2244
标题 不要复制已索引的元素初始值设定项
类别 使用情况
修复是中断修复还是非中断修复 非中断
在 .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+.”(句点)。 从显示的选项列表中选择“删除冗余的元素初始值设定项”。

Code fix for CA2244 - Remove redundant element initializer

何时禁止显示警告

请勿禁止显示与此规则的冲突。

另请参阅