Тривиальный пример "бесконечного" 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
? Могу ли я полагаться на то, что они всегда оцениваются "ленивыми"? Есть ли опасность создать бесконечный цикл?