J'ai deux collections de chaînes: CollectionA est une propriété StringCollection d'un objet stocké dans le système, tandis que CollectionB est une liste générée lors de l'exécution. CollectionA doit être mise à jour pour correspondre à CollectionB s'il y a des différences. J'ai donc conçu ce que je pensais être une simple méthode LINQ pour effectuer la suppression.Pourquoi je reçois "La collection a été modifiée, l'opération d'énumération peut ne pas s'exécuter" si elle ne modifie pas la collection énumérée?
var strDifferences = CollectionA.Where(foo => !CollectionB.Contains(foo));
foreach (var strVar in strDifferences) { CollectionA.Remove(strVar); }
mais je reçois une erreur "Collection was modified; enumeration operation may not execute"
sur strDifferences ... même si elle est un dénombrable séparé de la collection en cours de modification! J'ai initialement conçu ce explicitement pour éviter cette erreur, car ma première implémentation le produirait (comme je l'énumérais à travers CollectionA
et juste en supprimant quand !CollectionB.Contains(str)
). Quelqu'un peut-il nous expliquer pourquoi cette énumération échoue?
«ToArray()» ne serait-il pas meilleur ici? Il n'y a pas besoin d'utiliser 'List'. – svick
@svick C'est quelque chose que je me suis demandé depuis un certain temps, mais ce serait une question que je poserais un autre jour. Pourvu qu'il n'a pas déjà été demandé, bien sûr -checkle- –
@GraceNote attraper cela ici: http://stackoverflow.com/questions/1105990/is-it-better-to-call-tolist-or-toarray-in -linq-requêtes – nawfal