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?
10
A
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
- 1. InvalidOperationException: Sammlung wurde geändert; Aufzählung
- 2. NHibernate: Sammlung wurde geändert; Enumeration Operation kann nicht ausgeführt werden
- 3. Sammlung wurde geändert; Enumerationsoperation kann nicht ausgeführt werden
- 4. Sammlung wurde geändert; Enumerationsvorgang ausführen kann nicht in Arraylist
- 5. Entity-Framework-Sammlung wurde geändert; Enumerationsoperation kann nicht ausgeführt werden
- 6. Wie kann man wissen, welches Element geklickt wurde
- 7. Git: Wie kann man wissen, ob ein Commit ausgewählt wurde?
- 8. Wie kann man wissen, ob ein PHAsset modifiziert wurde?
- 9. Wie kann man wissen, wann ein Prozess beendet wurde?
- 10. Wie kann man wissen, ob eine XML-Eigenschaft definiert wurde?
- 11. Wie kann man wissen, wer die Nachricht
- 12. Wie kann man wissen, dass der Radiobutton nicht aktiviert ist?
- 13. Wie kann man wissen, dass Canvas Bitmap-Objekt
- 14. Observable Sammlung Sammlung geändert Frage
- 15. Wie kann ich wissen, dass die exe von der Anwendung ausgeführt wurde
- 16. Wie der genauen Pfad wissen, dass wurde in Datei erforderlich()
- 17. Wie kann man wissen, welches Attribut die Validierungsregel für die Wasserlinie genannt wurde?
- 18. Wie kann ich wissen, dass das Objekt total wie obj1 = obj2 geändert wird?
- 19. Wie kann ich wissen, wann der Text einer bearbeitbaren JComboBox geändert wurde?
- 20. Woher weiß man, dass Zellendaten nicht geändert oder geändert wurden?
- 21. Wissen, ob eine Modelleigenschaft geändert wurde seit Initialzustand in SAPUI5
- 22. Wie kann man wissen, ob eine Sitzung
- 23. Die Sammlung wurde nicht initialisiert
- 24. Wie angular.js erkennen, dass das Modell geändert wurde
- 25. Sammlung wurde geändert; Aufzählungsoperation wird möglicherweise nicht ausgeführt. Treenode Remove
- 26. Woher weiß ich, dass eine Formulareingabe geändert wurde?
- 27. Wie finde ich heraus, dass meine Abhängigkeitseigenschaft geändert wurde?
- 28. Finden, wie eine foreach-Sammlung geändert wird
- 29. Wie kann man wissen, ob RAPI dll
- 30. Warum erhalte ich "Sammlung wurde geändert; Aufzählungsoperation kann nicht ausgeführt werden", wenn die aufgezählte Auflistung nicht geändert wird?
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. –