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 和 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

不再起作用,两个对象都不同。

我不明白为什么?

4

1 回答 1

7

这很简单 - 您正在比较引用(内存地址),而不是对象属性。您需要覆盖类中的相等操作。Equals方法和GetHashCode也。

于 2013-05-16T15:47:16.980 回答