Это потому, что вы не преодолели равенства в своем классе. Прямо сейчас, когда вы используете разные, он проверяет ссылочное равенство. Чтобы изменить это, вам нужно переопределить несколько вещей: operator==
, Equals()
, а для получения лучших результатов GetHashCode()
.
Это, как я хотел бы сделать это:
public static bool operator ==(Person one, Person two)
{
return one.Id == two.Id && one.Name == two.Name;
}
public static override bool Equals(Person one, Person two)
{
return one == two;
}
public override bool Equals(object obj)
{
return obj is Person && ((Person)obj) == this;
}
public bool Equals(Person other)
{
return other == this;
}
public override int GetHashCode()
{
unchecked
{
return 17 * Id * 31 * Name.GetHashCode();
}
}
Кроме того, вы можете реализовать интерфейс IEquatable<T>
(я сделал выше, все, что вам нужно, чтобы убедиться, что вы добавляете : IEquatable<Person>
в конце вашего заголовок класса (class Person
и т. д.)), а затем это будет реализовано.
Не могли бы вы привести пример IEquatable с кодом, отредактировав ваш ответ? Или мне будет достаточно ссылки. спасибо –