Existe um IEqualityComparer embutido que compara objetos apenas usando seu valor de hash?
-
21-09-2019 - |
Pergunta
Existe um IEqualityComparer embutido que compara objetos pelo valor retornado pelo valor do código Gethash? É fácil escrever, mas eu prefiro usar uma classe fornecida em vez de uma personalizada.
Código atual:
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);
}
}
Solução
Não, isso não existe na estrutura até onde eu sei.
Seria uma coisa geralmente ruim - os códigos de hash não precisam ser únicos, por isso não poderia ser usado para imitar a igualdade normal, exceto para tipos com 2^32 valores possíveis ou menos, e um algoritmo de geração de hash que dá um código exclusivo para cada valor.
Estou lutando para pensar em qualquer uso sensível para isso - e é por isso que é improvável que você o encontre na estrutura. Talvez haja alguns muito Situação especializada em que você acha útil, mas isso não é justificativa suficiente para colocá -la na estrutura principal.
Por interesse, o que você está tentando fazer com isso?