c# - 为什么 ReadOnlyCollection<> 不包含 FindAll()、FindFirst()、

标签 c# collections readonly-collection

根据 FxCop 的建议和我个人的意愿,我一直在鼓励我所指导的团队尽可能多地使用 ReadOnlyCollections。如果只是为了让列表的收件人无法修改其内容。在他们的理论中,这就是面包和黄油。问题是 List<> 接口(interface)更加丰富,暴露了各种有用的方法。他们为什么做出这样的选择?

你只是放弃并返回可写集合吗?您是否返回只读集合,然后将它们包装在可写集合中?啊啊啊。


更新: 谢谢,我熟悉框架设计指南,这就是团队使用 FxCop 来强制执行它的原因。然而,这个团队使用 VS 2005(我知道,我知道),所以告诉他们 LINQ/Extension 方法可以解决他们的问题只会让他们难过。

他们了解到 List.FindAll() 和 .FindFirst() 比编写 foreach 循环更清晰。现在我正在插入他们使用 ReadOnlyCollections,他们失去了那种清晰度。

也许存在我没有发现的更深层次的设计问题。

-- 对不起,原来的帖子应该提到 VS2005 的限制。我已经生活了很长时间,以至于我没有注意到。

最佳答案

.NET Framework Design Guidelines Second Edition 的第 8.3.2 节:

DO use ReadOnlyCollection<T>, a subclass of ReadOnlyCollection<T>, or in rare cases IEnumerable<T> for properties or return values representing read-only collections.

我们使用 ReadOnlyCollections 来表达我们对返回集合的意图。

List<T>为方便起见,您所说的方法已添加到 .NET 2.0 中。在 C# 3.0/.NET 3.5 中,您可以在 ReadOnlyCollection<T> 上恢复所有这些方法(或任何 IEnumerable<T> )使用扩展方法(并使用 LINQ 运算符),所以我认为没有任何动机将它们本地添加到其他类型。它们存在于 List 上的事实只是一个历史记录,因为扩展方法现在可用但在 2.0 中不存在。

关于c# - 为什么 ReadOnlyCollection<> 不包含 FindAll()、FindFirst()、,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/921511/

相关文章:

c# - 使用 C# 从 Wikipedia 读取表格(内容)

java - 如何使算法在Java中更有效地查找集合中的重复对象?

Java8 与 Map 进行流传输?

c# - ReadOnlyCollection vs Liskov - 如何正确建模可变集合的不可变表示

c# - 在 C# 中创建只读列表

c# - Entity Framework 只读集合

c# - ASP.Core 3 中基于角色的授权 : how to grant access everywhere to certain role?

c# - 异步方法 .Result 与同步方法

java - 数组与 Java 集合框架中的任何集合之间的区别?

c# - Dictionary<TKey, TValue> 的枚举器是否按添加顺序返回键值对?