1

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

1 回答 1

4

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

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

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

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

于 2009-11-24T09:25:52.527 回答