gpt4 book ai didi

c# - foreach 循环中的无限 IEnumerable

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

回答后this question我将以下 C# 代码放在一起只是为了好玩:

public static IEnumerable<int> FibonacciTo(int max)
{
int m1 = 0;
int m2 = 1;
int r = 1;

while (r <= max)
{
yield return r;

r = m1 + m2;
m1 = m2;
m2 = r;
}
}

foreach (int i in FibonacciTo(56).Where(n => n >= 24) )
{
Console.WriteLine(i);
}

问题是我不喜欢将 max 参数传递给函数。现在,如果我不使用一个代码将输出正确的数据,但随着 IEnumerable 继续工作,代码似乎会挂起。我该如何编写才能像这样使用它:

foreach (int i in Fibonacci().Where(n => n >= 24 && n <= 56) )
{
Console.WriteLine(i);
}

最佳答案

您需要结合使用 SkipWhileTakeWhile

foreach (int i in Fibonacci().SkipWhile(n => n < 24)
.TakeWhile(n => n <= 56))
{
Console.WriteLine(i);
}

这些能够根据条件结束循环; Where 流式传输其输入(适当过滤)直到输入用完(在您的情况下,从不)。

关于c# - foreach 循环中的无限 IEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/826598/

25 4 0