基于key的KeyValueComparer

KeyValueComparer based on key

我有 2 个键值比较器 - 在这两个中我都使用键来比较,它是字符串。 我可以使用泛型作为值 - 所以我不能有 2 个 classes 我只能有 1 个?

所以我希望我可以只有 1 个 class

而不是下面的 classes
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();
    }
}

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