Из документации:
Этот метод определяет равенство с помощью средства сравнения по умолчанию, как это определено реализацией объекта метода IEquatable (Of T) .Equals для T (тип значений).в списке).
Если вы не внедрили IEquatable<T>.Equals
, он использует значение по умолчанию, равное ссылочному равенству.Кроме того, вы реализовали IEquatable<T>.Equals
, но не сделали это должным образом.
Например, thepreviousitem id = 1 и name = test И если у меня есть другой объект с тем же идентификатором и тем же именем, он все равно будетдобавьте это ...
Вам нужно что-то вроде
class Foo : IEquatable<Foo> {
public int Id { get; private set; }
public string Name { get; private set; }
public Foo(int id, string name) {
this.Id = id;
this.Name = name;
}
public bool Equals(Foo other) {
return this.Id == other.Id && this.Name == other.Name;
}
}
Наконец, если вы собираетесь многократно проверять наличие дубликатов, вам не следуетт List<T>
.Вы должны использовать HashSet<T>
.