2013-01-11 35 views
3

我需要爲業務對象編寫第二個相等比較器。這是一個專門的平等比較器,只適用於某些情況。我不想重寫Equal(),因爲我們的持久層使用它來內部比較對象以供自己使用。 讓我給你一個類的實例:使用兩個不同的相等比較器的C#

public class Product : BusinessObjectBase 
{ 
    string Name {get;set;} 
    string Desc {get;set;} 
    double Price {get;set;} 
} 

因爲我們紀念三個屬性在我們的數據訪問層的持久性數據屬性時,equals()方法在BusinessObjectBase比較這些屬性。現在,在特定情況下,我想檢查產品A是否等於產品B只是名稱。我不想在檢查上硬編碼實際屬性,因爲此屬性可能稍後會更改。

儘管可以在這裏使用IComparer,但是基於MSDN上的描述,IComparer應該用來不等同項目而是對它們進行排序,所以這看起來不是100%正確的答案。 我想使用.NET已有的東西,而不是創建另一個接口。 這樣做的最好方法是什麼?

謝謝

+1

它已經存在:猜名字? [IEqualityComparer!](http://msdn.microsoft.com/en-us/library/ms132151.aspx);) – digEmAll

+0

你在說「產品A等於產品B只是名稱,我不想硬編碼檢查時的實際屬性,因爲此屬性可能會發生變化「。如何比較2個對象而不指定Name屬性並僅使用IEqualityComparer 。你是否在Equals Method中使用了反射,或者在IEqualityComparer 中有什麼特別之處,這會讓你這麼做 – Sankara

回答

14

您正在尋找IEqualityComparer<T>

+0

非常感謝。正是我在尋找的東西 – BlueChameleon

+0

@Slaks:我明白你的答案,我只是好奇,也讀過我的評論,我的問題是這個界面中如此特別的東西能夠解決他的問題嗎?他不能用IComparer/ – Sankara

+0

@ 1010101:'IEqualityComparer '包含'GetHashCode(T)',使其可用於散列表。對於沒有訂購的類型也可以實現。 – SLaks

相關問題