的简单的例子是 “无限” 的IEnumerable将如何处理“无限”的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
这样的表达式时是否有任何缺陷?我能依靠这样一个事实,他们总是被评估为“懒惰”吗?是否有产生无限循环的危险?
只是要挑剔,当我= Int32.MaxValue和你做我++时,你的“无限”示例会抛出一个异常吗?还是它循环到Int32.MinValue?嗯..... – 2010-04-29 19:05:20
你说得对。它可能会抛出一个溢出异常...我会编辑它。 – Danvil 2010-04-29 19:06:28
只是在这里挑剔,你的观点仍然存在。 :)另外,我试了一下,它确实循环到Int32.MinValue。没有OverflowException,所以它实际上是一个无限循环。 – 2010-04-29 19:08:45