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;
}
Wenn Sie die innere for
Schleife auskommentieren, wirft es, es ist offensichtlich, weil wir Änderungen an der Sammlung vorgenommen haben.Warum dieser Code wirft 'Sammlung wurde geändert', aber wenn ich etwas davor iteriere, ist es nicht?
Jetzt, wenn Sie es auskommentieren, warum diese Schleife uns erlauben, diese zwei Elemente hinzuzufügen? Es dauert eine Weile, es wie eine halbe Minute zu laufen (auf Pentium CPU), aber nicht werfen, und das Komische ist, dass es gibt:
Es wurde ein bisschen erwartet, aber es zeigt an, dass wir Änderungen vornehmen können und die Sammlung tatsächlich ändert. Irgendwelche Ideen, warum dieses Verhalten auftritt?
Das ist interessant. Ich könnte das Verhalten reproduzieren, aber nicht, wenn ich die interne Schleife von Int.MaxValue auf einen Wert wie 100 ändern – Steve
Wie lange hast du gewartet? Es dauert eine ganze Weile, um "int.MaxValue" Iterationen zu beenden ... –
@JonSkeet Ich sagte es unter dem Code, eine halbe Minute. (On Pentium CPU) – LyingOnTheSky