加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么ReadOnlyCollection <>包含FindAll(),FindF

发布时间:2020-12-15 18:04:32 所属栏目:百科 来源:网络整理
导读:根据FxCop的建议和我个人的倾向,我一直鼓励我正在指导的团队尽可能多地使用ReadOnlyCollections.仅限于列表的收件人无法修改其内容.在他们的理论中,这是面包牛油.问题是List界面更加丰富,暴露出各种有用的方法.他们为什么做出这个选择? 你只是放弃并返回可
根据FxCop的建议和我个人的倾向,我一直鼓励我正在指导的团队尽可能多地使用ReadOnlyCollections.仅限于列表的收件人无法修改其内容.在他们的理论中,这是面包&牛油.问题是List<>界面更加丰富,暴露出各种有用的方法.他们为什么做出这个选择?

你只是放弃并返回可写的集合吗?您是否返回只读集合,然后将它们包装在可写的多样性中? AHHHHH.

更新:
谢谢我熟悉框架设计指南,这就是为什么团队使用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来表达我们返回的集合的意图.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读