需要帮助来终止延迟执行

MBW*_*MBW 2 c# linq

以下代码段在控制台上打印1到10,但在变量"i"到达int.MaxValue之前不会终止.TIA指出我错过了什么.

class Program 
{
    public static IEnumerable<int> GetList() 
    {
        int i = 0;
        while (i < int.MaxValue)
        {
            i++;
            yield return i;
        }
    }

    static void Main(string[] args)
    {
        var q = from i in GetList() // keeps calling until i reaches int.MaxValue
                where i <= 10
                select i; 

        foreach (int i in q)
            Console.WriteLine(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

Nes*_*cio 5

你可以尝试:

        var q = GetList ().TakeWhile ((i)=> i <=10);
Run Code Online (Sandbox Code Playgroud)


Ste*_*ven 5

您定义的查询MainGetList方法的顺序一无所知,并且必须使用谓词检查该列表的每个值i <= 10.如果您想尽快停止处理,您可以使用Take扩展方法或使用TakeWhile扩展方法:

foreach (int i in GetList().Take(10))
    Console.WriteLine(i);

foreach (int i in GetList().TakeWhile(x => x <= 10))
    Console.WriteLine(i);
Run Code Online (Sandbox Code Playgroud)