Я не вижу, как скомпилируется первая версия, а вторая не будет ничего делать, если вы не используете результат. Он ничего не удаляет из существующей коллекции - на самом деле, даже не может быть коллекцией в памяти, поддерживающей его. Он просто возвращает последовательность, которая после итерации возвращает соответствующие значения.
Если вы используете результат, например,
IEnumerable<MyClass> others = allObjects.Except(objectsToExcept);
foreach (MyClass x in others)
{
...
}
тогда будет хорошо , если вы переопределили GetHashCode
и Equals
или , если вы счастливы использовать ссылочное равенство. Вы пытаетесь удалить логически равные значения или в обеих последовательностях встречаются одинаковые ссылки ? Вы переопределили GetHashCode
и Equals
, и если да, уверены ли вы, что эти реализации работают?
В принципе, все должно быть в порядке - я предлагаю вам попробовать создать короткую, но полную программу, которая демонстрирует проблему; Я подозреваю, что при этом вы поймете, что не так.