的簡單的例子是 「無限」 的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