栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ReadOnlyCollection或IEnumerable用于公开成员集合?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ReadOnlyCollection或IEnumerable用于公开成员集合?

更现代的解决方案

除非您需要内部集合是可变的,否则可以使用该

System.Collections.Immutable
程序包,将字段类型更改为不可变集合,然后直接公开它-
Foo
当然,假设自身是不可变的。

更新了答案以更直接地解决问题

如果调用代码仅对集合进行迭代,是否有任何理由将内部集合公开为ReadOnlyCollection而不是IEnumerable?

这取决于您对调用代码的信任程度。如果您完全控制将调用此成员的所有内容,并且您 保证 不会使用任何代码:

ICollection<Foo> evil = (ICollection<Foo>) bar.Foos;evil.Add(...);

那么可以肯定的是,如果您直接将集合退回,则不会造成任何伤害。我通常会比这更偏执。

同样,正如您所说:如果只 需要

IEnumerable<T>
,那么为什么将自己绑在更坚固的东西上?

原始答案

如果使用的是.NET 3.5,则可以通过使用对Skip的简单调用来避免进行复制 避免进行简单的转换:

public IEnumerable<Foo> Foos {    get { return foos.Skip(0); }}

(还有很多其他选项可以用来进行简单包装-关于

Skip
Select / Where的好处是,没有委托可以为每次迭代无意义地执行。)

如果您不使用.NET 3.5,则可以编写一个非常简单的包装器以执行相同的操作:

public static IEnumerable<T> Wrapper<T>(IEnumerable<T> source){    foreach (T element in source)    {        yield return element;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/465535.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号