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" の 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

もう機能しません。両方のオブジェクトが異なります。

理由がわかりません。

4

1 に答える 1

7

簡単です。オブジェクトのプロパティではなく、参照 (メモリ アドレス) を比較しています。クラス内で等価演算をオーバーライドする必要があります。EqualsメソッドGetHashCodeも。

于 2013-05-16T15:47:16.980 に答える