是否有内置的IEqualityComparer只使用其哈希值来比较对象?

时间:2009-11-24 09:21:34

标签: c# gethashcode iequalitycomparer

是否有内置的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);
    }
}

1 个答案:

答案 0 :(得分:4)

不,据我所知,框架中不存在这样的事情。

这通常是坏事 - 哈希码不必是唯一的,因此它不能用于模仿正常的相等性,除了具有2 ^ 32个可能值或更少值的类型,以及哈希生成算法,为每个值提供唯一的代码。

我正在努力想到任何明智的用途 - 这就是为什么你不太可能在框架中找到它。也许有一些非常的特殊情况,你发现它很有用,但这还不足以将它放在主框架中。

出于兴趣,你想用它做什么?