带有属性的奇怪行为

本文关键字:属性 | 更新日期: 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方法