是否有一个内置的IEqualityComparer,其比较对象只能使用他们的哈希值?
-
21-09-2019 - |
题
是否有一个内置的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个可能的值或更少的其它,以及哈希生成算法给出一个唯一的代码为每个值。
我挣扎想任何合理的利用这 - 这就是为什么你不可能在框架中找到它。也许有一些的非常的专业情况下,你会发现它是有用的,但是这还不够,理由把它的主要框架。
出于兴趣,什么是你想用它做?
不隶属于 StackOverflow