基于密钥的KeyValueComparer

问题描述:

我有两个键值比较器 - 在我使用的密钥进行比较,这是字符串。 我可以使用通用的值 - 所以而不是有两个班,我可以只有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(); 
    } 
} 

由于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