2009-01-04 126 views
12

如果我有一個複雜的對象,編寫代碼以比較兩個實例以查看它們是否相同的最佳實踐模式是什麼比較兩個對象。

回答

15

實現IEquatable接口。這定義了一個值類型或類實現用於確定實例平等創建特定類型的方法的一般化方法。不要忘記重寫Equals(對象)。 點擊此處瞭解詳情:

http://msdn.microsoft.com/en-us/library/ms131187.aspx

+0

的平等的優勢複雜對象平等是如何從IComparable的 – leora 2009-01-04 16:51:06

+0

此不同IEquatable只會告訴你,如果他們是相同的或沒有。 IComparable會給你一個相對的順序。對於沒有排序的對象,但是可以相等(例如,圖像),則不能使用IComparable。 – tvanfosson 2009-01-04 16:55:09

2

我想答案是高度依賴的問題。例如,只有當所有屬性相等時,纔可能考慮對象相同。這可能是每個對象不具有唯一標識屬性的情況。如果有這樣一個屬性(或屬性),說的ID或ID和版本,唯一標識該類型的每一個對象,那麼你可能只需要基於該屬性(或屬性)進行比較。

的基本模式,但是,應該是這樣的:

if their references are equal (includes both null) 
    return true 
else if one object is null 
    return false 
else 
    return value based on relevant properties 

需要注意的是,如果你重寫Equals操作,你還需要重寫GetHashCode(),以便爲等效對象的哈希碼是相同的。這將確保當對象用作密鑰時,使用散列代碼來確定重複密鑰的數據結構能夠正常工作。

0

既然你提到一個複雜的對象,確保由tvanfosson提到的複雜對象的所有複合對象實現equals(對象)。最後落實把所有複合對象