public Dictionary<string, string> Data { get; set; }
使用上面的代码行我得到样式警察错误,CA2227集合属性应该是只读的。
在没有添加Stylecop抑制或必须创建自己的只读字典类的情况下,是否有某些方法可以移除此错误?
答案 0 :(得分:7)
您似乎只需要删除“set”关键字。像这样:
private readonly Dictionary<string, string> data = new Dictionary<string, string>();
public Dictionary<string, string> Data { get { return this.data; } }
通常,您不需要重新分配集合,而只需清除现有集合。 我猜这是警告的来源。上面的示例是我大部分时间都在使用的方法。
答案 1 :(得分:3)
不确定但以下情况可能会抑制错误:
public Dictionary<string, string> Data { get; private set; }
说实话,由于某人对风格的主观想法(又名StyleCop和FxCop),阻碍你的发展是愚蠢的。
答案 2 :(得分:2)
这是代码分析(以前称为FxCop)警告,而不是StyleCop。 这是CA2227,而不是CA1227。
请参阅this MSDN article,该问题非常明显。
尝试以下操作(私有设置器)来修复它:
public Dictionary<string, string> Data { get; private set; }
答案 3 :(得分:2)
我不认为CA2227会要求您提供只读Dictionary<,>
。而StyleCop抱怨你可以直接设置字典。你应该删除setter和/或将其设为私有以消除警告。此外,您的课程可能会提供您自己的Add
和Clear
方法。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms182327%28VS.80%29.aspx。
答案 4 :(得分:0)
我发现这个特殊建议/警告的问题是,“修复它”的开发人员通常最终编码通常不必要的副本,而不是使用对原始集合的引用。例如,我有以下一行:
myThing.Items = GetItems();
开发人员用以下方法修复:
var items = GetItems();
foreach (var item in items)
{
myThing.Items.Add(item);
}
想象一下,GetItems()返回一百万个项目的集合。这怎么可能是件好事?我发现微软声明“不要排除此规则的警告”。在MSDN中有点强大!