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;
}
Якщо ви коментуєте внутрішній for
цикл, він кидає, це, очевидно, тому, що ми внесли зміни в колекцію.
Тепер, якщо ви його відмежуєте, чому ця петля дозволяє нам додати ці два елементи? Це запускає деякий час, як запустити його як півхвилини (на процесорі Pentium), але він не кидає, і найсмішніше, що він видає:
Це було трохи очікуваного, але це вказує на те, що ми можемо змінити, і це фактично змінює колекцію. Будь-які ідеї, чому така поведінка виникає?
int.MaxValue
ітерацій потрібно досить багато часу ...