supprimer des éléments d'une Liste générique<t>
J'ai la méthode suivante, je souhaite supprimer des éléments de ma collection qui correspondent à l'Id de produit. Semble assez simple, mais j'obtiens une exception. Fondamentalement, ma collection est hors de synchronisation. Alors, quelle est la meilleure façon de supprimer un élément d'une collection.
public void RemoveOrderItem(Model.Order currentOrder, int productId)
{
foreach (var orderItem in currentOrder.OrderItems)
{
if (orderItem.Product.Id == productId)
{
currentOrder.OrderItems.Remove(orderItem);
}
}
}
Détails De L'Exception: System.InvalidOperationException: Collection a été modifiée; opération d'énumération peut pas exécuter
OriginalL'auteur frosty | 2010-06-08
Vous devez vous connecter pour publier un commentaire.
De la modification d'une collection à l'intérieur d'une boucle ne fonctionne pas. Pour contourner ce problème,
List
a quelques méthodes qui permettent de “lot” modification d'une collection. Dans votre cas, utilisez:ok, j'ai répondu à ma propre question 🙂 j'ai changé à la Liste<t>
OriginalL'auteur Konrad Rudolph
Vous ne pouvez pas modifier une collection lors de l'itération. Il suffit d'utiliser un normal
for
boucle au lieu d'unforeach
boucle.OriginalL'auteur Hans Olsson
Par le bouclage de cette façon, vous ne pouvez pas supprimer des éléments en raison de sa collection, il garde la trace des éléments stockés.
Moyen facile de faire cela :
ou
OriginalL'auteur Pranay Rana
Vous ne pouvez pas supprimer un élément d'une collection en parcourant, vous pouvez garder une trace de la orderItem, puis l'enlever après avoir terminer la boucle
OriginalL'auteur BenW
Que vous vous rendez compte que vous ne pouvez pas supprimer un élément d'une collection, tandis que vous êtes en boucle sur elle. Je suis sûr que quelqu'un sera en mesure de bénéficier d'une plus soignée LINQ solution, mais les points suivants devraient vous aider à aller d'abord:
Notez que
List<T>.RemoveAll
est disponible dans .NET 2.0 et est techniquement pas LINQ, mais il ressemble. C'est un énorme plus sur LINQ pour ces pauvres âmes qui ont pour maintenir la compatibilité Windows 2000.OriginalL'auteur openshac
"foreach" fournit un "Avant uniquement en lecture seule" itération d'une collection.
Comme une solution de contournement, vous pouvez copier la référence à une autre collection, puis itérer sur la copie de collecte et de supprimer les éléments de l'original.
OriginalL'auteur Manish Basantani