Gibt es eine eingebaute in IEqualityComparer, die nur ihre Hash-Wert unter Verwendung von Objekten vergleicht?

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

Frage

Gibt es eine eingebaute in IEqualityComparer, die Objekte mit dem Wert vergleicht ihren GetHashCode Wert zurückgegeben? Es ist einfach zu schreiben, aber ich würde es vorziehen, eine bereitgestellte Klasse anstelle eines benutzerdefinierten zu verwenden.

Aktuelle Code:

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);
    }
}
War es hilfreich?

Lösung

Nein, so etwas gibt es im Rahmen nicht so weit mir bewusst bin.

Es wäre eine allgemein schlechte Sache - Hash-Codes müssen nicht eindeutig sein, damit es nicht zu imitieren normale Gleichheit verwendet werden könnte, anders als bei den Typen mit 2 ^ 32 möglichen Werten oder weniger, und eine Hash-Generation Algorithmus, der für jeden Wert einen eindeutigen Code gibt.

Ich kämpfe jeden vernünftigen Gebrauch dafür zu denken - das ist, warum Sie unwahrscheinlich, dass es im Rahmen zu finden. Vielleicht gibt es einige sehr spezialisiert Situation, wo Sie es nützlich finden würde, aber das ist nicht genug Rechtfertigung es in den Hauptrahmen zu setzen.

Aus Interesse, was willst du damit zu tun?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top