Localizar e remover itens da coleção

Qual é a melhor maneira de remover um conjunto de uma coleção, mas ainda mantém os itens que foram removidos em uma coleção separada?

Eu escrevi um método de extensão que faz isso, mas acho que deve haver uma maneira melhor. Aqui está a minha função:

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

E você usaria assim:

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)

Não tenho 100% de certeza do que se passa nos bastidores noFindAll eRemoveAll métodos, mas imagino que uma maneira melhor seria "transferir" itens de uma lista para outr

questionAnswers(8)

yourAnswerToTheQuestion