gpt4 book ai didi

c# - 您如何设计一个返回(理论上)无限数量项目的枚举器?

转载 作者:太空狗 更新时间:2023-10-29 20:58:05 25 4
gpt4 key购买 nike

我正在编写看起来与此类似的代码:

public IEnumerable<T> Unfold<T>(this T seed)
{
while (true)
{
yield return [next (T)object in custom sequence];
}
}

显然,此方法永远不会返回。 (C# 编译器默默地允许这样做,而 R# 给我警告 “函数永远不会返回”。)

一般来说,提供一个返回无限数量项目的枚举器而不提供停止枚举的方法是糟糕的设计吗?

这个场景有什么特别的注意事项吗?内存?性能?其他问题?

如果我们总是提供退出条件,有哪些选项?例如:

  • 表示包含或排他边界的类型 T 的对象
  • 一个Predicate<T> continue (如 TakeWhile 所做的那样)
  • 计数(如 Take 所做的那样)
  • ...

我们是否应该依靠用户调用 Take(...)/TakeWhile(...)Unfold(...) 之后? (可能是首选选项,因为它利用了现有的 Linq 知识。)

如果代码要在公共(public) API 中发布,无论是按原样(通用)还是作为此模式的特定实现,您是否会以不同的方式回答这个问题?

最佳答案

只要您非常清楚地记录该方法永远不会完成迭代(当然,该方法本身返回得非常快),那么我认为就可以了。事实上,它可以使一些算法更加简洁。我不相信有任何显着的内存/性能影响 - 尽管如果您在迭代器中引用一个“昂贵”的对象,该引用将被捕获。

滥用 API 的方式总是有的:只要你的文档清晰,我认为就可以了。

关于c# - 您如何设计一个返回(理论上)无限数量项目的枚举器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/197297/

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