Я пытаюсь написать метод расширения в .NET, который будет работать с общей коллекцией, и удалить все элементы из коллекции, которые соответствуют заданным критериям.
Это была моя первая попытка:
public static void RemoveWhere<T>(this ICollection<T> Coll, Func<T, bool> Criteria){
foreach (T obj in Coll.Where(Criteria))
Coll.Remove(obj);
}
Однако при этом возникает исключение InvalidOperationException: «Коллекция была изменена; операция перечисления может не выполняться». Что имеет смысл, поэтому я предпринял вторую попытку со второй переменной-коллекцией для хранения элементов, которые необходимо удалить, и перебрал их вместо этого:
public static void RemoveWhere<T>(this ICollection<T> Coll, Func<T, bool> Criteria){
List<T> forRemoval = Coll.Where(Criteria).ToList();
foreach (T obj in forRemoval)
Coll.Remove(obj);
}
Это вызывает то же исключение; Я не уверен, что я действительно понимаю, почему, поскольку 'Coll' больше не перебирает коллекцию, почему же она не может быть изменена?
Если у кого-нибудь есть какие-либо предложения относительно того, как я могу заставить это работать, или лучшего способа добиться того же, это было бы замечательно.
Спасибо.