FxCop CA2227:CollectionPropertiesShouldBeReadOnly with Private Set

时间:2014-04-11 13:00:47

标签: c# collections private readonly fxcop

我有以下模式:

public class Test
{
    public ICollection<string> Stuff { get; private set; }

    public Test()
    {
        Stuff = new List<string>();
        Stuff.Add("Initial Item");
    }
}

FxCop正在抱怨CA2227:CollectionPropertiesShouldBeReadOnly。为什么? setter是私有的,因此拥有私有字段没有什么不同,除了它是一个更短更整洁的语法。

这对我来说是一种非常常见的模式,我真的不想单独抑制每个警告或用字段+属性模式替换它。

有解决方法吗?

2 个答案:

答案 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)

问题似乎已经解决了。