2013-05-16 77 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