CA2227与字典是什么修复


public Dictionary<string, string> Data { get; set; }

使用上面的代码行,我收到样式警察错误,CA2227 集合属性应该是只读的。

有没有办法在不添加 Stylecop 抑制或创建自己的只读字典类的情况下跳过此错误?

看起来你只需要删除"set"关键字。像这样:

private readonly Dictionary<string, string> data = new Dictionary<string, string>();
public Dictionary<string, string> Data { get { return this.data; } }

通常,您不需要重新分配集合,而只需清除现有集合即可。我想这就是这个警告的来源。上面的示例是我大部分时间使用的方法。

不确定,但以下内容可能会抑制该错误:

public Dictionary<string, string> Data { get; private set; }

老实说,由于某人对风格的主观观念(又名StyleCop和FxCop(而阻碍你的发展是愚蠢的。

这是一个代码分析(以前称为 FxCop(警告,而不是 StyleCop。这是CA2227,不是CA1227。

请参阅这篇 MSDN 文章,该文章对该问题非常不言自明。

尝试以下(私有二传手(来修复它:

public Dictionary<string, string> Data { get; private set; }

我不认为 CA2227 要求您提供只读Dictionary<,>。相反,StyleCop抱怨你可以直接设置字典。您应该删除资源库和/或将其设为私有以消除警告。此外,您的类可能会提供您自己的AddClear方法。有关详细信息,请参阅 http://msdn.microsoft.com/en-us/library/ms182327%28VS.80%29.aspx。

我发现这个特定建议/警告的问题是,"修复它"的开发人员通常最终会编写不必要的副本,而不是使用对原始集合的引用。 例如,我有以下行:

myThing.Items = GetItems();

开发人员通过以下方式修复它:

var items = GetItems();
foreach (var item in items)
{
    myThing.Items.Add(item);
}

想象一下,GetItems(( 返回了一百万个项目的集合。 这怎么可能是一件好事呢? 我发现微软在MSDN中的"不要从此规则中排除警告"的声明有点强!

最新更新