属性表现异常

3
我有一个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且名称为“Created”的Status实例):
Assert.AreEqual(myObj.Status, Status.Created);
    // True

它正常工作,两个对象是相等的。但如果我将我的状态类更改为以下内容:
 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

不再工作,两个对象是不同的。
我不明白为什么?
1个回答

7
很简单 - 你正在比较引用(内存地址),而不是对象属性。你需要在类中重写相等操作。还需要重写Equals方法和GetHashCode方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接