是否有一个内置的IEqualityComparer,其比较对象只能使用他们的哈希值?

StackOverflow https://stackoverflow.com/questions/1788889

是否有一个内置的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个可能的值或更少的其它,以及哈希生成算法给出一个唯一的代码为每个值。

我挣扎想任何合理的利用这 - 这就是为什么你不可能在框架中找到它。也许有一些的非常的专业情况下,你会发现它是有用的,但是这还不够,理由把它的主要框架。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top