Existe um IEqualityComparer embutido que compara objetos apenas usando seu valor de hash?

StackOverflow https://stackoverflow.com/questions/1788889

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);
    }
}
Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top