FxCop CA2227:CollectionPropertiesShouldBeReadOnly with Priva

本文关键字:with Priva CollectionPropertiesShouldBeReadOnly CA2227 FxCop | 更新日期: 2023-09-27 17:57:51

我有以下模式:

public class Test
{
    public ICollection<string> Stuff { get; private set; }
    public Test()
    {
        Stuff = new List<string>();
        Stuff.Add("Initial Item");
    }
}

FxCop正在向CA2227抱怨:CollectionProperties ShouldBeReadOnly。为什么?setter是私有的,所以它与拥有私有字段没有什么不同,只是它的语法更短、更整洁。

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

有办法绕过这个吗?

FxCop CA2227:CollectionPropertiesShouldBeReadOnly with Priva

编辑:

是的,制作私人set应该像readonly一样,但我想FxCorp没有考虑到这一点。您可以忽略该规则,也可以使用readonly来支持私有字段。我认为这是可以安全地忽略FxCorp规则的一些情况。无论如何,它们更像是一个指导方针。

另一种方法是使用私有ICollection<string>,然后公开您自己的方法来添加和删除集合中的项。这将删除FxCorp中的警告。

老答案:


通过拥有私有set,可以防止它被初始化/设置为类外的新值,但不会阻止任何人在集合中添加任何内容。从课外你仍然可以做:

Test t = new Test();
t.Stuff.Add("Something");

因此,您的收藏不是只读的。

您还可以看到Jon Skeet关于将集合公开为属性的文章

问题似乎已经自行解决。