を適切に実装するように注意してください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
クラスに追加すると、期待どおりに機能します。