IEnumerable 作为返回类型

2024-03-03

使用有问题吗IEnumerable<T>作为返回类型? FxCop 抱怨退货List<T>(建议返回Collection<T>反而)。

嗯,我一直遵循一条规则“接受最少的,但回报最多的”。

从这个角度来说,回归IEnumerable<T>是一件坏事,但是当我想使用“惰性检索”时该怎么办呢?另外,yield关键字真是个好东西。


这实际上是一个由两部分组成的问题。

1)返回 IEnumerable 本质上有什么问题吗

什么都没有。事实上,如果您使用 C# 迭代器,这是预期的行为。预先将其转换为 List 或其他集合类并不是一个好主意。这样做是对调用者的使用模式做出假设。我发现对调用者进行任何假设都不是一个好主意。他们可能有充分的理由想要 IEnumerable。也许他们想将其转换为完全不同的集合层次结构(在这种情况下,转换为 List 就浪费了)。

2) 是否有任何情况下最好返回 IEnumerable 以外的内容?

是的。虽然对呼叫者做出太多假设并不是一个好主意,但根据自己的行为做出决定是完全可以的。想象一个场景,您有一个多线程对象,它将请求排队到一个不断更新的对象中。在这种情况下,返回原始 IEnumerable 是不负责任的。一旦集合被修改,可枚举就会失效,并会导致发生异常。相反,您可以拍摄结构的快照并返回该值。以 List 形式表示。在这种情况下,我只会将对象作为直接结构(或接口)返回。

不过,这肯定是比较罕见的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IEnumerable 作为返回类型 的相关文章

随机推荐