我有以下模式:
public class Test
{
public ICollection<string> Stuff { get; private set; }
public Test()
{
Stuff = new List<string>();
Stuff.Add("Initial Item");
}
}
FxCop正在抱怨CA2227:CollectionPropertiesShouldBeReadOnly。为什么? setter是私有的,因此拥有私有字段没有什么不同,除了它是一个更短更整洁的语法。
这对我来说是一种非常常见的模式,我真的不想单独抑制每个警告或用字段+属性模式替换它。
有解决方法吗?
答案 0 :(得分:3)
编辑:
是的,私密set
应该像readonly
,但我猜FxCorp并不这么认为。您可以忽略该规则,也可以拥有readonly
的支持私有字段。我认为这是您可以安全地忽略FxCorp规则的一些情况。无论如何,它们更像是指导方针。
另一种方法可能是拥有私有ICollection<string>
,然后公开自己的方法来添加和删除集合中的项目。这将删除FxCorp的警告。
旧答案:
通过拥有私有set
,您可以阻止它从类外部初始化/设置为新值,但您不会阻止任何人在集合中添加任何内容。从课堂外你仍然可以做到:
Test t = new Test();
t.Stuff.Add("Something");
因此,您的收藏品不是只读的。
您还可以看到this post from Jon Skeet about exposing a collection as a property
答案 1 :(得分:-3)
问题似乎已经解决了。