Будьте осторожны, чтобы правильно реализовать IEquatable<T>
. Я сделал следующую ошибку:
public class SubjectDTO: IEquatable<SubjectDTO>
{
public string Id;
public bool Equals(SubjectDTO other)
{
return Object.Equals(Id, other.Id);
}
public override int GetHashCode()
{
return Id == null ? 1 : Id.GetHashCode();
}
}
Выглядит хорошо, верно? Но когда вы попробуете это, вы обнаружите удивительный результат:
var a = new SubjectDTO() { Id = "1"};
var b = new SubjectDTO() { Id = "1"};
Console.WriteLine(Object.Equals(a, b));
Console.WriteLine(a.Equals(b));
False
True
А? Ну, важно, чтобы оверид Equals(object other)
:
public override bool Equals(object other)
{
return other == null ? false : Equals(other as SubjectDTO);
}
Когда вы добавите его в класс SubjectDTO
, он будет работать как положено.