2010-10-04 8 views
10

Als ich die Sammlung geändert habe, die ich mit foreach durchgegangen bin, bekam ich eine Ausnahme. Ich bin also nur neugierig, wie foreach (oder die Laufzeit) das erkennen. Ist es möglich, dies mit einem allgemeinen Objekt zu tun?Wie kann man wissen, dass die iterierte Sammlung geändert wurde?

+2

Ich bin mir nicht sicher über C#, aber in Java Welt foreach Konstrukt ist nur ein syntaktischer Kleber zu normalen Iterator ... Daher, wenn Sammlung während der Iteration geändert wird, wird ConcurrentModificationException geworfen. Es scheint, dass dies genau hier der Fall ist. –

Antwort

15

Die Sammlung selbst muss es erkennen. In den Standard-Bibliothekssammlungen wird dies durch eine interne Versionsnummer erreicht, die von jeder Operation geändert und vom Iterator bei jeder Iteration überprüft wird (dh jedes Mal, wenn Sie MoveNext aufrufen, prüft es, ob die Versionsnummer die gleiche ist wie zu der Zeit) der Iterator wurde erstellt).

Verwandte Themen