我对C#有一种奇怪的行为。
我有一个包含静力学的课程,有些像这样的东西:
public class Status
{
public int Id { get; internal set; }
public string Name { get; internal set;}
public static Status Created = new TicketStatus { Id = 1, Name = "Created" };
}
我这样使用它(假设myObj.Status是一个状态实例,Id = 1且Name =“Created”):
Assert.AreEqual(myObj.Status, Status.Created);
// True
它工作正常,两个对象都是平等的。
但如果我将我的Status类改为:
public class Status
{
public int Id { get; internal set; }
public string Name { get; internal set;}
public static Status Created
{
get { return new TicketStatus { Id = 1, Name = "Created" }; }
}
}
然后声明
Assert.AreEqual(myObj.Status, Status.Created);
// False
不再起作用,两个对象都不同。
我不明白为什么?
答案 0 :(得分:7)
这很简单 - 您正在比较引用(内存地址),而不是对象属性。您需要覆盖类中的相等操作。 Equals
方法和GetHashCode
也是。