Buscar y eliminar elementos de la colección

¿Cuál es la mejor manera de eliminar un conjunto de una colección, pero aún mantener los elementos que se eliminaron en una colección separada?

He escrito un método de extensión que hace eso, pero creo que debe haber una mejor manera. Aquí está mi función:

public static List<T> FindAndRemove<T>(this List<T> lst, Predicate<T> match)
{
    List<T> ret = lst.FindAll(match);
    lst.RemoveAll(match);
    return ret;
}

Y lo usarías así:

List<String> myList = new List<String>();
myList.Add("ABC");
myList.Add("DEF");
myList.Add("ABC");
List<String> removed = myList.FindAndRemove(x => x == "ABC");
// myList now contains 1 item (DEF)
// removed now contains 2 items (ABC, ABC)

No estoy 100% seguro de lo que sucede detrás de escena en laFindAll yRemoveAll métodos, pero imagino que una mejor manera sería "transferir" de alguna manera los elementos de una lista a la otra.

Respuestas a la pregunta(8)

Su respuesta a la pregunta