代码之家  ›  专栏  ›  技术社区  ›  Anand

基于键的KeyValueComparer

  •  1
  • Anand  · 技术社区  · 7 年前

    我有两个键值比较器-在这两个比较器中,我都使用键进行比较,这是字符串。 我可以对值使用泛型吗-因此我可以只使用1个类而不是2个类?

    因此,我希望我只有一个班,而不是下面的班

    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();
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Codor    7 年前

    由于比较器仅在 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();
        }
    }