Comment supprimer de manière conditionnelle des éléments d'une collection .NET

Je suis en train d'écrire une méthode d'extension .NET qui va fonctionner sur une collection générique, et supprimer tous les éléments de la collection qui correspondent à un critère donné.

C'était ma première tentative:

public static void RemoveWhere<T>(this ICollection<T> Coll, Func<T, bool> Criteria){
    foreach (T obj in Coll.Where(Criteria))
        Coll.Remove(obj);
}

Toutefois, cela déclenche une exception InvalidOperationException, "la Collection a été modifiée; opération d'énumération peut pas exécuter". Ce qui est logique, j'ai donc fait une deuxième tentative avec un deuxième prélèvement variable pour contenir les éléments qui doivent être enlevés et itérer qu'au lieu:

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);
}

Ce lève la même exception; je ne suis pas sûr de vraiment comprendre pourquoi 'Coll' n'est plus la collection en cours de itéré, alors pourquoi ne peut-il pas être modifié?

Si quelqu'un a des suggestions sur comment je peux obtenir que cela fonctionne, ou une meilleure façon d'obtenir les mêmes, ce serait sympa.

Grâce.

source d'informationauteur Lee D