一个“无限”IEnumerable
的一个简单示例是:
IEnumerable<int> Numbers() {
int i=0;
while(true) {
yield return unchecked(i++);
}
}
我知道,
foreach(int i in Numbers().Take(10)) {
Console.WriteLine(i);
}
和
var q = Numbers();
foreach(int i in q.Take(10)) {
Console.WriteLine(i);
}
两者都可以正常工作(并打印出数字0-9)。
但是,在复制或处理像q
这样的表达式时,是否存在任何陷阱? 我能否依赖于它们总是被“惰性”地评估这一事实? 是否有产生无限循环的危险?