gpt4 book ai didi

c# - IEnumerable 作为返回类型

转载 作者:IT王子 更新时间:2023-10-29 04:13:39 26 4
gpt4 key购买 nike

使用IEnumerable<T>有问题吗?作为返回类型?FxCop 提示返回 List<T> (它建议改为返回 Collection<T>)。

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

由此看来,返回IEnumerable<T>是一件坏事,但是当我想使用“惰性检索”时该怎么办?此外,yield关键字真是个好东西。

最佳答案

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

1) 返回 IEnumerable

本质上有什么问题吗?

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

2) 是否有任何情况下返回 IEnumerable 以外的东西可能更可取?

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

不过这种情况肯定比较少见。

关于c# - IEnumerable<T> 作为返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/381208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com