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), но он не срабатывает, и самое забавное, что он выводит:
Это было немного ожидаемо, но это указывает на то, что мы можем изменить, и это фактически меняет коллекцию. Есть идеи, почему возникает такое поведение?