具有属性的奇怪行为

use*_*678 3 .net c# properties

我对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" };
 }
Run Code Online (Sandbox Code Playgroud)

我这样使用它(假设myObj.Status是一个状态实例,Id = 1且Name ="Created"):

Assert.AreEqual(myObj.Status, Status.Created);
    // True
Run Code Online (Sandbox Code Playgroud)

它工作正常,两个对象都是平等的.

但是,如果我将我的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" }; }
     }
 }
Run Code Online (Sandbox Code Playgroud)

然后声明

Assert.AreEqual(myObj.Status, Status.Created);
    // False
Run Code Online (Sandbox Code Playgroud)

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

我不明白为什么?

Kon*_*nov 7

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