是否有内置的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);
}
}
答案 0 :(得分:4)
不,据我所知,框架中不存在这样的事情。
这通常是坏事 - 哈希码不必是唯一的,因此它不能用于模仿正常的相等性,除了具有2 ^ 32个可能值或更少值的类型,以及哈希生成算法,为每个值提供唯一的代码。
我正在努力想到任何明智的用途 - 这就是为什么你不太可能在框架中找到它。也许有一些非常的特殊情况,你发现它很有用,但这还不足以将它放在主框架中。
出于兴趣,你想用它做什么?