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;
}
Si vous commentez la for
boucle interne , cela lève, c'est évidemment parce que nous avons apporté des modifications à la collection.
Maintenant, si vous le décommentez, pourquoi cette boucle nous permet-elle d'ajouter ces deux éléments? Cela prend un certain temps pour l'exécuter comme une demi-minute (sur un processeur Pentium), mais cela ne lance pas, et le plus drôle est qu'il génère:
C'était un peu attendu, mais cela indique que nous pouvons changer et cela change réellement la collection. Des idées pourquoi ce comportement se produit?
int.MaxValue
itérations ...