在遵守代码分析错误的过程中,我正在更改我的属性以拥有私有设置器。然后我开始尝试去理解why多一点。 MS 表示,根据一些研究this http://msdn.microsoft.com/en-us/library/ms182327.aspx:
可写集合属性允许用户用完全不同的集合替换该集合。
而答案是,here https://stackoverflow.com/questions/5554566/c-sharp-code-analysis-2227-confusion, 状态:
在 a 上添加公共 setterList<T>
物体是危险的。
But the reason没有列出为什么它是危险的。这就是我好奇的部分。
如果我们有这个集合:
public List<Foo> Foos { get; set; }
为什么要使 setter 私有化?显然我们不希望客户端代码replace集合,但如果客户可以删除每个元素,然后添加他们想要的任何内容,那还有什么意义呢?这与完全替换集合不一样吗?遵循此代码分析规则如何提供价值?
不公开 setter 可以防止出现为集合分配值的情况null
。有一个区别null
和一个没有任何价值的集合。考虑:
for (var value in this.myCollection){ // do something
当没有值时(即有人调用了Remove
对每个值),没有什么不好的事情发生。什么时候this.myCollection
为空,但是NullReferenceException
会被抛出。
代码分析假设您的代码没有检查myCollection
在对其进行操作之前为 null。
它可能也是对中定义的线程安全集合类型的额外保护System.Collections.Concurrent
。想象一下某个线程试图通过覆盖来替换整个集合。通过摆脱公共设置器,线程唯一的选择是调用线程安全的Add
and Remove
方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)