是否有内置的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或更少的可能值的类型之外,它不能用于模拟正常相等,并且散列生成算法可以每个值的唯一代码。
我正在努力考虑将其用于任何合理的用途-这就是为什么您不太可能在框架中找到它的原因。也许在某些非常特殊的情况下,您会发现它很有用,但这不足以将其放入主框架。
出于兴趣,您打算怎么做?
关于c# - 是否有内置的IEqualityComparer仅使用对象的哈希值比较对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1788889/