2013-04-11 2 views
0

Je suis conscient que cette question est posée ici beaucoup, mais je suis incapable de recueillir une réponse correcte basée sur ma boucle spécifique.La collection a été modifiée; opération d'énumération ne peut pas exécuter foreach loop

J'utilise une boucle foreach pour passer à travers une entité commerciale comme ceci:

foreach (Content item in category) 
{ 
    item.Stats = 55; 
    item.Commit(); 
} 

La boucle foreach fonctionne correctement pendant le premier élément qu'il récupère et place la valeur mais brise timide de l'autre quelques-uns et J'ai l'erreur dans le titre de ma page. Je suis conscient que j'obtiens l'erreur car l'élément ne peut pas être modifié pendant l'itération. Mais je suis à un perdu quant à la façon de commettre à la base de données alors que dans cette boucle.

Merci d'avance.

+1

Il semble que votre fonction 'Commit' modifie l'élément d'une manière ou d'une autre. Pouvez-vous poster le code à cette fonction? – Icemanind

+0

Votre fonction Commit est-elle en train de modifier la catégorie? La catégorie est-elle une collection observable? –

+2

La * collection * ne peut pas être modifiée. Les articles eux-mêmes peuvent. – Esailija

Répondre

1

Vous pouvez créer une collection identique avec des clones de vos éléments, et au lieu de modifier ces éléments dans votre collection itérée, modifiez et validez les éléments correspondants dans la collection clonée. Ensuite, supprimez votre collection itérée lorsque vous avez terminé, en traitant votre collection clonée comme les nouveaux "originaux".

+0

Pouvez-vous me donner un exemple de code? L'objet category est un BusinessEntityList et est défini comme suit: 'BusinessEntityList category = SiteCategories.Filter (nouveau ContentFilter (true));' – sacbeme

+0

Droit. Cela a fonctionné j'ai créé un clone List <> avec les articles et couru une boucle pour enregistrer avec cette liste. – sacbeme

0

La solution la plus simple consiste à ajouter ToList() ce qui entraîne l'énumération de la copie de l'énumération d'origine.

foreach (Content item in category.ToList()) 
{ 
    item.Stats = 55; 
    item.Commit(); 
} 
Questions connexes