C# infinite iteration

别来无恙 提交于 2019-12-01 18:11:32

问题


Is there anything similar in C# to Java's Stream.iterate? The closest thing I could find was Enumerable.Range but it is much different.

The reason I'm asking is that I've been just watching some presentation about good programming principles and there was a thread about declarative vs. imperative code. What caught my attention was a way you can generate a pseudo-infinite set of data.


回答1:


There isn't an exact equivalent in the .Net framework but there is one in the MoreLINQ library:

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

It's also very simple to recreate it using yield:

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

yield enables to create an infinite enumerator because:

When a yield return statement is reached in the iterator method, expression is returned, and the current location in code is retained. Execution is restarted from that location the next time that the iterator function is called.

From yield (C# Reference)



来源:https://stackoverflow.com/questions/26802669/c-sharp-infinite-iteration

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!