Почему я получаю «Коллекция была изменена; операция перечисления может не выполняться », если не изменена перечисляемая коллекция? [Дубликат]

На этот вопрос уже есть ответ здесь:

Коллекция была изменена; операция перечисления может не выполняться в ArrayList [duplicate] 9 ответов

У меня есть две коллекции строк: CollectionA - это свойство StringCollection объекта, хранящегося в системе, а CollectionB - это список, сгенерированный во время выполнения. CollectionA необходимо обновить, чтобы соответствовать CollectionB, если есть какие-либо различия. Поэтому я разработал простой метод LINQ для удаления.

var strDifferences = CollectionA.Where(foo => !CollectionB.Contains(foo));
foreach (var strVar in strDifferences) { CollectionA.Remove(strVar); }

Но я получаю"Collection was modified; enumeration operation may not execute" ошибка в strDifferences ... даже если это отдельный перечисляемый элемент из изменяемой коллекции! Я изначально придумал этоэксплицитно чтобы избежать этой ошибки, поскольку моя первая реализация произвела бы это (как я перечислял черезCollectionA и просто удаляя когда!CollectionB.Contains(str)). Может ли кто-нибудь пролить свет на то, почему это перечисление не удается?

Ответы на вопрос(3)

Ваш ответ на вопрос