Frage

Mögliches Duplikat:
Was ist der beste Algorithmus für ein überschriebenes System.Object.GetHashCode?

Dies ist uns bekannt, wenn wir das überschreiben Equals Methode von Object In unseren benutzerdefinierten Typen sollten wir auch eine Implementierung von überschreiben und bereitstellen GetHashCode Methode zur Unterstützung der Generierung eindeutiger Hash-Codes zur Verwendung zur Unterstützung Hashtable Und Dictionary Sammlungsklassen und können auch andere Klassen sein.

Dies erfordert die Implementierung des in unserem verwendeten Hashing-Algorithmus overriden GetHashCode Die Methode ist optimal und genau, d. h.Es generiert einen eindeutigen Hash dieses Typs und tut dies auch so schnell wie möglich, um die Leistung der Anwendung zu verbessern, die unseren Typ verwendet.

Meine Frage ist welche Hashing-Algorithmen sind genau und bieten optimale Leistung beim Einsatz GetHashCode Implementierung?Oder sollten wir nur die Basistypen verwenden? GetHashCode Implementierung?Ich würde diese Antwort gerne für beide wissen value types Und reference types..

Bearbeiten:Hier ist ein Beispiel einer Klasse unten, die erklärt, warum ich überschreiben müsste Equals:

public class Laptop : LaptopBase
{
    public readonly string Make;
    public readonly string ProcessorArch;
    public readonly int MemorySupported;
    public readonly int HardDiskGBSupported;
    public readonly Color ColorName;

    public Laptop(make, procArch, memorySupp, hdGB, color)
    {
        Make = make;
        ProcessorArch = procArch;
        MemorySupported = memorySupp;
        HardDiskGBSupported = hdGB;
        ColorName = color;
    }
}

Jetzt möchte ich für zwei Laptop-Instanzen „true“ zurückgeben, bei denen alle oben definierten Felder miteinander übereinstimmen, sodass das überschrieben werden muss Equals Und GetHashCode Methode und eine weitere Anforderung, wie Sie sehen, ist, dass es sich um eine abgeleitete Klasse handelt, die weiterverwendet werden kann und eine Reihe von Methoden unterstützt.und kann daher nicht zu einem Werttyp (Struktur) gemacht werden.Ich habe es mit 2 Instanzen des oben genannten Typs mit allen passenden Instanzfeldern versucht und wenn ich die Basisimplementierung von verwende Equals - es kehrt zurück false wo ich es haben möchte true.. Wie würde ich ein solches Szenario unterstützen?

War es hilfreich?

Lösung

Es hängt vom Typ ab, auf dem es implementiert wird, aber es sollte eine gute Streuung der Werte ermöglichen und es ist KEIN Muss, dass GetHashCode() eindeutige Werte zurückgibt.Es sollte auf den Feldern basieren, die in Ihrer Equals-Implementierung verwendet werden, und diese Felder sollten unveränderlich sein.Daher sind die Anforderungen für Equals/GetHashCode für Strukturen und Klassen dieselben.

Und wie Henk sagte, ist es besser, Equals/GetHashCode überhaupt nicht zu überschreiben ...

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