тривиальный пример "бесконечный" 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
? Могу ли я полагаться на то, что они всегда оцениваются «ленивыми»? Есть ли опасность создать бесконечный цикл?
Как раз быть придирчивым, разве ваш «бесконечный» пример не выдает исключение, когда i = Int32.MaxValue и вы делаете i ++?Или он переходит в Int32.MinValue? Хмм ..... –
Вы правы. Вероятно, это будет исключение переполнения ... Я отредактирую его. – Danvil
Просто будучи придирчивым, ваша точка все еще сталкивалась. :) Кроме того, я попробовал, и он работает в Int32.MinValue. No OverflowException, поэтому он был фактически бесконечным циклом. –