【问题标题】:Strange behaviour with properties带有属性的奇怪行为
【发布时间】:2013-05-16 15:44:30
【问题描述】:

我对 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

效果很好,两个对象都相等。

但如果我将我的状态类更改为:

 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

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

我不明白为什么?

【问题讨论】:

    标签: c# .net properties


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多