var ints = new List< int >( new[ ] {
1,
2,
3,
4,
5
} );
var first = true;
foreach( var v in ints ) {
if ( first ) {
for ( long i = 0 ; i < int.MaxValue ; ++i ) { //<-- The thing I iterate
ints.Add( 1 );
ints.RemoveAt( ints.Count - 1 );
}
ints.Add( 6 );
ints.Add( 7 );
}
Console.WriteLine( v );
first = false;
}
Jeśli skomentujesz wewnętrzną for
pętlę, zostanie ona wyrzucona , jest to oczywiście spowodowane zmianami w kolekcji.
Jeśli teraz odkomentujesz to, dlaczego ta pętla pozwala nam dodać te dwa elementy? Trwa trochę czasu, aby uruchomić go jak pół minuty (na procesorze Pentium), ale nie rzuca się, a zabawne jest to, że wyświetla:
Było to trochę oczekiwane, ale wskazuje, że możemy się zmienić i to faktycznie zmienia kolekcję. Jakieś pomysły, dlaczego takie zachowanie występuje?
int.MaxValue
iteracji zajmuje trochę czasu ...