是否有内置的IEqualityComparer可以通过对象的GetHashCode值返回的值比较对象?它很容易编写,但是我更喜欢使用提供的类而不是自定义的类。

当前代码:

private class HashComparer : IEqualityComparer<TKey>
{
    private readonly Func<TKey, int> _Hasher;

    public HashComparer (Func<TKey, int> hasher)
    {
        _Hasher = hasher;
    }

    public bool Equals (TKey x, TKey y)
    {
        // null supposed to throw, therefore no check
        return _Hasher (x) == _Hasher (y);
    }

    public int GetHashCode (TKey obj)
    {
        return _Hasher (obj);
    }
}

最佳答案

不,据我所知,这种东西在框架中不存在。

这通常是一件坏事-散列码不必唯一,因此除了用于2 ^ 32或更少的可能值的类型之外,它不能用于模拟正常相等,并且散列生成算法可以每个值的唯一代码。

我正在努力考虑将其用于任何合理的用途-这就是为什么您不太可能在框架中找到它的原因。也许在某些非常特殊的情况下,您会发现它很有用,但这不足以将其放入主框架。

出于兴趣,您打算怎么做?

关于c# - 是否有内置的IEqualityComparer仅使用对象的哈希值比较对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1788889/

10-12 13:19