Y at-il un IEqualityComparer intégré qui compare les objets en utilisant uniquement leur valeur de hachage?

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

Question

Y at-il un IEqualityComparer intégré qui compare des objets par la valeur retournée par leur valeur GetHashCode? Il est facile d'écrire, mais je préférerais utiliser une classe fournie au lieu d'un sur mesure.

Code actuel:

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);
    }
}
Était-ce utile?

La solution

Non, une telle chose n'existe pas dans le cadre pour autant que je suis au courant.

Ce serait une chose généralement mauvais - codes de hachage ne doivent pas être unique, donc il ne pouvait pas être utilisé pour imiter l'égalité normale, autre que pour les types avec 2 ^ 32 valeurs possibles ou moins, et une génération de hachage algorithme qui donne un code unique pour chaque valeur.

J'ai du mal à penser à une utilisation judicieuse de ce - ce qui est la raison pour laquelle vous avez peu de chances de le trouver dans le cadre. Peut-être il y a quelques très Situation spécialisée où vous pouvez trouver une justification, il utile, mais cela ne suffit pas à mettre dans le cadre principal.

Hors intérêt, ce que vous essayez de faire?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top