带有属性的奇怪行为
本文关键字:属性 | 更新日期: 2023-09-27 18:14:10
我对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"的Status实例:
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
不能工作了,两个对象是不同的
我不明白为什么?
这很简单-您正在比较引用(内存地址),而不是对象属性。您需要在类中重写相等操作。Equals
方法和GetHashCode
方法