2013-05-16 76 views
3

我有一个奇怪的行为与C#。与属性的奇怪行为

我有一个类,包括静态,一些lokks这样的:

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 =一个状态实例“创建“):

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 

不工作了,这两个对象是不同的。

我不明白为什么?

回答

7

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