Метод «Кроме» в BCL удаляет все дубликаты, а это не то, что вам нужно.
Если списки в задаче большие, то для эффективного выполнения этой задачи вы, вероятно, захотите тратить память в обмен на экономию времени. Что-то вроде:
// yield all members of "sequence" omitting those in "except"
static IEnumerable<string> Filter(
this IEnumerable<string> sequence,
IEnumerable<string> except)
{
var set = new HashSet<string>(except); // Burn memory to save time
return from item in sequence
where !set.Contains(item)
select item;
}
Таким образом, вы получаете быстрый поиск каждый раз, когда тестируете предмет.
Позвони с
var sequence = new List<string>() { A, B, A, C, D };
var except = new List<string>() { B, C };
var result = sequence.Filter(except).ToList();