SharePointCommunity
Die deutschsprachige Community für SharePoint 2016, 2013 und Office 365

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

bewertet von 0 Usern
Nicht beantwortet Dieser Beitrag hat 0 Geprüfte Antworten | 2 Antworten | 1 Follower

Top-50-Beitragsschreiber
250 Beiträge
MStel erstellt in 9 Feb 2017 12:11

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

Top-10-Beitragsschreiber
Männlich
17.696 Beiträge

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
Top-50-Beitragsschreiber
250 Beiträge

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

Seite 1 von 1 (3 Elemente) | RSS