Mam dwie kolekcje ciągów: CollectionA jest właściwością StringCollection obiektu przechowywanego w systemie, natomiast CollectionB jest listą wygenerowaną w czasie wykonywania. CollectionA musi zostać zaktualizowany, aby pasował do CollectionB, jeśli występują jakiekolwiek różnice. Więc wymyśliłem to, czego oczekiwałem jako prostą metodę LINQ do wykonania usuwania.Dlaczego otrzymuję komunikat "Kolekcja została zmodyfikowana, operacja wyliczania może nie zostać wykonana", gdy nie modyfikuje wyliczonej kolekcji?
var strDifferences = CollectionA.Where(foo => !CollectionB.Contains(foo));
foreach (var strVar in strDifferences) { CollectionA.Remove(strVar); }
Ale ja otrzymuję błąd "Collection was modified; enumeration operation may not execute"
na strDifferences ... mimo, że jest odrębną przeliczalny z kolekcji modyfikowane! Pierwotnie wymyśliłem ten jawnie, aby uniknąć tego błędu, ponieważ moja pierwsza implementacja go wygeneruje (tak jak wyliczyłem przez CollectionA
i właśnie usunięto, gdy !CollectionB.Contains(str)
). Czy ktokolwiek może rzucić trochę wgląd w przyczyny niepowodzenia tego wyliczenia?
Czy "ToArray()" nie byłoby tu lepiej? Nie ma potrzeby używania 'List'. – svick
@svick To jest coś, nad czym się zastanawiałem przez jakiś czas, ale byłoby to pytanie, które chciałbym zadać na inny dzień. Pod warunkiem, że nie zostało już zadane, oczywiście - chuck- –
@GraceNote złapać tutaj: http://stackoverflow.com/questions/1105990/is-it-better-to-call-tolist-or-toarray-in -linq-queries – nawfal