Un esempio banale di un "infinito" IEnumerable sarebbeCome gestire un IEnumerable "infinito"?
IEnumerable<int> Numbers() {
int i=0;
while(true) {
yield return unchecked(i++);
}
}
lo so, che
foreach(int i in Numbers().Take(10)) {
Console.WriteLine(i);
}
e
var q = Numbers();
foreach(int i in q.Take(10)) {
Console.WriteLine(i);
}
entrambi bene il lavoro (e stampare il numero 0- 9).
Ma ci sono delle insidie quando si copiano o gestiscono espressioni come q
? Posso contare sul fatto che vengono sempre valutati "pigri"? C'è qualche pericolo nel produrre un loop infinito?
Solo per essere pignoli, il tuo esempio "infinito" non genera un'eccezione quando i = Int32.MaxValue e tu fai i ++?Oppure passa a Int32.MinValue? Hmm ..... –
Hai ragione. Probabilmente genererà un'eccezione di overflow ... La modifico. – Danvil
Solo essere pignoli qui, il tuo punto è ancora imbattuto. :) Inoltre, ho provato e lo fa in loop a Int32.MinValue. No OverflowException, quindi era in effetti un ciclo infinito. –