SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




foreach schleifen in SP Collections - Fehlermeldung in Visual Studio C# Sharepoint 2010 - Collection was modified; enumeration operation may not execute.

Unbeantwortet Dieser Beitrag hat 2 Antworten

Ohne Rang
282 Beiträge
MStel erstellt 9 Feb. 2017 12:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi,

ich bin derzeit in C# (Visual Studio) eine Konsolenanwendung für meinen SharePoint Server (2010) am schreiben, die dafür sorgen soll, dass alle Listenitems aller Listen in meinem Web, in eine Spalte, die in Jeder Liste identisch heißt, einen Wert einträgt und die Listenelemente anschließend updated.

Ich habe also eine SPListCollection erstellt mit Web.Lists.

Anschließend gehe ich in einer foreach (SPlist in SPListCollection) Schleife durch die einzelnen Listen.
Innerhalb dieser foreach Schleife hole ich aus der aktuell ausgewählten SPList also noch alle SPListItems in einer foreach Schleife.
Beim Debuggen konnte ich sicherstellen, dass bis zu diesem Zeitpunkt alles einwandfrei funktioniert.

Nun wird es aber interessant:

Als ich beim Listitem angekommen war und dessen wert mit item["spalte"] = Wert gesetzt habe und das item anschließend Updaten wollte, kommt, sobald die äußere foreach Schleife in die "2. Runde geht" die Fehlermeldung "Collection was modified; enumeration operation may not execute.".

Das erste mal hat das Programm also alles richtig gemacht, für alle weiteren Items funktioniert aber nichts mehr.

Ich habe nach einigen Recherchen gelesen, dass foreach Schleifen in Kombination mit Collections in SharePoint nicht wirklich gut kompatibel zueinander sind und habe deswegen alle foreach Schleifen in for Schleifen umgebaut, aber erhalte die selbe Fehlermeldung.
Lasse ich das Update des ListItems weg, kommt die Fehlermeldung nicht, die Werte werden beim schrittweise debuggen korrekt angezeigt, jedoch logischerweise nicht aktualisiert, demnach bringt mir das so nichts.
Die Liste jedoch kann ich problemlos updaten ohne Fehlermeldung zu erhalten.

Woran kann das liegen? Meint ihr, dass Problem ist, dass eine foreach- in einer foreach schleife ist?
Mir ist derzeit keine andere Lösung eingefallen, das Problem anders zu lösen und der Programmcode scheint mir richtig, da die Objekte genau die Daten enthalten die ich benötige und die Prozedur beim 1. ausführen auch einwandfrei das tut, was sie soll.

Naja wenn ihr ähnliche Probleme habt würde ich mich über eine Antwort sehr freuen.


Mfg

mstel

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 9 Feb. 2017 12:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das Ganze hat absolut gar nichts mit SharePoint zu tun, sondern ist ein Standardproblem der .Net-Entwicklung. Das Prinzip ist ganz einfach: wenn man mit foreach durch ein IEnumerable (z.B. eine Collection) geht, darf man innerhalb der Schleife das IEnumerable nicht ändern. Das geschieht z.B. explizit wenn man in der Schleife Elemente löscht, es kann aber auch implizit sein. Wenn man z.B. ein SPListItem ändert, hat das Änderungen am Parent-SPList zur Folge.

Man umgeht das, indem an for statt foreach verwendet.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
282 Beiträge
MStel Als Antwort am 9 Feb. 2017 12:44
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Oh, ich hab diese Fehlermeldung noch nie vorher gesehen.
Danke für die ausführliche Erklärung!

Dann muss ich mal schauen warum ich die Meldung trotz for Schleife bekommen habe bzw. was ich falsch gemacht hab.

Grüße
Mstel