Ho due raccolte di stringhe: CollectionA è una proprietà StringCollection di un oggetto memorizzato nel sistema, mentre CollectionB è una lista generata in fase di esecuzione. La raccolta deve essere aggiornata per corrispondere alla raccolta B se vi sono differenze. Quindi ho ideato quello che mi aspettavo fosse un semplice metodo LINQ per eseguire la rimozione.Perché sto ricevendo "La raccolta è stata modificata, l'operazione di enumerazione potrebbe non essere eseguita" quando non si modifica la raccolta enumerata?
var strDifferences = CollectionA.Where(foo => !CollectionB.Contains(foo));
foreach (var strVar in strDifferences) { CollectionA.Remove(strVar); }
Ma sto ottenendo un errore di "Collection was modified; enumeration operation may not execute"
su strDifferences ... anche se è enumerabile un separato dalla collezione in corso di modifica! Inizialmente ho ideato questo in modo esplicito per eludere questo errore, in quanto la mia prima implementazione lo avrebbe prodotto (mentre stavo enumerando su CollectionA
e rimuovendolo solo quando !CollectionB.Contains(str)
). Qualcuno può far luce sul perché questa enumerazione sta fallendo?
Non sarebbe 'ToArray()' essere meglio qui? Non è necessario usare 'List'. – svick
@svick Questo è qualcosa che mi sono chiesto per un po 'di tempo, ma sarebbe una domanda che vorrei chiedere in un altro giorno. A patto che non sia già stato chiesto, ovviamente -chuckle- –
@GraceNote, prendi questo qui: http://stackoverflow.com/questions/1105990/is-it-better-to-call-tolist-or-toarray-in -linq-query – nawfal