c#语言的惰性计算
示例
仅当该foreach语句移至下一个项目时,迭代器块才评估下一个yield语句。
考虑以下示例:
private IEnumerable<int> Integers()
{
var i = 0;
while(true)
{
Console.WriteLine("内部迭代器: " + i);
yield return i;
i++;
}
}
private void PrintNumbers()
{
var numbers = Integers().Take(3);
Console.WriteLine("Starting iteration");
foreach(var number in numbers)
{
Console.WriteLine("内部foreach: " + number);
}
}这将输出:
开始迭代
内部迭代器:0
内部foreach:0
内部迭代器:1
内部foreach:1
内部迭代器:2
内部foreach:2
观看演示
作为结果:
即使在行打印之前调用了iterator方法,也会先打印“开始迭代”,因为该行Integers().Take(3);实际上并未开始迭代(未进行任何调用)IEnumerator.MoveNext()
打印到控制台的行在iterator方法内部的一个和迭代器方法内部的一个之间交替foreach,而不是迭代器方法内部的所有首先评估的行
该程序由于方法而终止,即使迭代器方法具有永不中断的方法。.Take()whiletrue
热门推荐
10 读书祝福语女生短句简短
11 感谢同事新婚祝福语简短
12 感谢教官文案祝福语简短
13 员工聚会蛋糕祝福语简短
14 元宵发客户祝福语简短
15 给团队信心祝福语简短
16 医美的祝福语大全简短
17 异国姻缘的祝福语简短
18 兄妹拍照祝福语简短的话