C#无限迭代

SOR*_*der 5 .net c# linq enumerable

C#和Java有什么类似的东西Stream.iterate吗?我能找到的最接近的是Enumerable.Range它,但却有很大的不同.

我问的原因是我一直只是看一些关于良好编程原理的演示文稿,并且有一个关于声明代码和命令代码的线程.引起我注意的是一种可以生成伪无限数据集的方法.

i3a*_*non 11

.Net框架中没有确切的等价物,但是MoreLINQ库中有一个:

foreach (var current in MoreEnumerable.Generate(5, n => n + 2).Take(10))
{
    Console.WriteLine(current);
}
Run Code Online (Sandbox Code Playgroud)

使用yield以下方法重建它也非常简单:

public static IEnumerable<T> Iterate<T>(T seed, Func<T,T> unaryOperator)
{
    while (true)
    {
        yield return seed;
        seed = unaryOperator(seed);
    }
}
Run Code Online (Sandbox Code Playgroud)

yield 能够创建无限枚举器,因为:

在迭代器方法中达到yield return语句时,将返回表达式,并保留代码中的当前位置.下次调用迭代器函数时,将从该位置重新开始执行.

收益率(C#参考)

  • @SOReader然后使用MoreLINQ. (3认同)
  • 这应该被标记为此处的答案。它提供了一个明确的答案(“不,没有”),同时还在 `MoreLinq` 库中提供了一个非常常见的替代方案,以及在没有库的情况下实现它的手工代码。 (2认同)