次のクラスとユニットテストを受けてください。このオブジェクトの等価性テストが失敗するのはなぜですか?
public class Entity
{
public object Id { get; set; }
public override bool Equals(object obj)
{
return this == (Entity)obj;
}
public static bool operator == (Entity base1, Entity base2)
{
if (base1.Id != base2.Id)
{
return false;
}
return true;
}
public static bool operator != (Entity base1, Entity base2)
{
return (!(base1.Id == base2.Id));
}
}
[TestMethod]
public void Test()
{
Entity e1 = new Entity { Id = 1 };
Entity e2 = new Entity { Id = 1 };
Assert.IsTrue(e1 == e2); //Always fails
}
そのが失敗した理由を誰かが説明できますか?
私はnull IDに対処するためにobject.Equals(base1.Id、base2.Id)を使用します。 –
良い提案。 –
(もちろん、base1やbase2がnullの場合でも穴が残っていますが、他の問題もあります:) –