c# - 基于key的KeyValueComparer

标签 c# .net generics keyvaluepair

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

所以我希望我可以只有 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();
    }
}

最佳答案

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

关于c# - 基于key的KeyValueComparer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40637680/

相关文章:

c# - 如何对通用列表进行排序?

c# - MySQL 参数化查询中的用户凭据无效

.net - 如何在 ViewBag 中传递变量列表

java - 通过封闭类类型变量绑定(bind)的内部类类型参数

c# - asp.net mvc azure AD 身份验证无限循环

c# - TeamCity 不会创建发布文件夹

c# - MVC 和 JQuery : Best practice for retrieving form data

c# - 谁取消了我的任务?

Java 通用通配符边界不起作用

java - 我可以有一个接受子类型的列表属性吗?