繁体   English   中英

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

[英]Is there a built-in IEqualityComparer that compares objects only using their hash value?

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

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

这通常是Bad Thing - 哈希代码不必是唯一的,因此除了具有2 ^ 32个可能值或更少值的类型之外,它不能用于模仿正常相等,并且哈希生成算法给出每个值的唯一代码。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM