2016-11-16 101 views
1

我有兩個鍵值比較器 - 在我使用的密鑰進行比較,這是字符串。 我可以使用通用的值 - 所以而不是有兩個班,我可以只有1?基於密鑰的KeyValueComparer

所以不是類下面我想我只能有1類

class KvpComparer : IEqualityComparer < KeyValuePair < string, T>> 
{ 
... 
} 

class KvpComparer : IEqualityComparer<KeyValuePair<string, Tuple<string, string>>> 
{ 
    public bool Equals(KeyValuePair<string, Tuple<string, string>> x, KeyValuePair<string, Tuple<string, string>> y) 
    { 
     return x.Key.Equals(y.Key); 
    } 

    public int GetHashCode(KeyValuePair<string, Tuple<string, string>> obj) 
    { 
     return obj.Key.GetHashCode(); 
    } 
} 

class KvpComparer2 : IEqualityComparer<KeyValuePair<string, string>> 
{ 
    public bool Equals(KeyValuePair<string, string> x, KeyValuePair<string, string> y) 
    { 
     return x.Key.Equals(y.Key); 
    } 

    public int GetHashCode(KeyValuePair<string, string> obj) 
    { 
     return obj.Key.GetHashCode(); 
    } 
} 

回答

3

由於comparers在KeyValuePair的值類型區別僅在於,你可以使用一個類型參數的值類型來概括將兩個比較器合併爲一個通用類型,如下所示。

class KvpComparer<T> : IEqualityComparer<KeyValuePair<string,T>> where T : class 
{ 
    public bool Equals(KeyValuePair<string,T> x, KeyValuePair<string,T> y) 
    { 
     return x.Key.Equals(y.Key); 
    } 

    public int GetHashCode(KeyValuePair<string, T> obj) 
    { 
     return obj.Key.GetHashCode(); 
    } 
} 
+0

非常感謝,Codor! – Anand