keine direkte Antwort auf Ihre Frage, die Jonas gut beantwortet hat, was jedoch von Nutzen sein kann, wenn Sie in Hashes Sorgen um Gleichheit Tests sind
Von unseren Tests, je nachdem, was Sie mit Hashcodes erfordern, In C# müssen Hashcodes für Gleichheitsoperationen nicht eindeutig sein. Als Beispiel betrachten wir folgendes:
Wir hatten eine Anforderung, den Gleichheitsoperator und damit die GetHashCode-Funktion unserer Objekte zu überlasten, da sie flüchtig und zustandslos geworden waren, und sich direkt aus Daten, also an einer Stelle, von Quellen die Anwendung, die wir benötigten, um sicherzustellen, dass ein Objekt als gleich einem anderen Objekt angesehen würde, wenn es aus den gleichen Daten stammte, nicht nur, wenn es die gleiche Referenz war. Unsere eindeutigen Datenkennungen sind Guids.
Der Gleichheitsoperator war einfach zu bedienen, da wir nur auf die Guid des Datensatzes überprüft (nach der Überprüfung auf Null).
Leider ist die HashCode-Datengröße (die ein int ist) abhängig vom Betriebssystem und auf unserem 32-Bit-System wäre der Hashcode 32 Bit. Wenn wir die GetHashCode-Funktion überschreiben, ist es mathematisch unmöglich, aus einer GUID, die größer als 32 Bit ist, einen eindeutigen Hashcode zu generieren (schauen Sie sich die Converse an, wie würden Sie eine 32-Bit-Ganzzahl in eine GUID übersetzen).
Wir haben dann einige Tests durchgeführt, bei denen wir Guid als String genommen haben und den HashCode des Guid zurückgegeben haben, der in unseren Tests fast immer einen eindeutigen Bezeichner liefert, aber nicht immer.
Was wir jedoch festgestellt haben, wenn ein Objekt in einem Hashed-Collection-Objekt ist (eine Hashtabelle, ein Dictionary usw.), wenn 2 Objekte nicht eindeutig sind, aber ihre Hashcodes sind, wird der Hashcode nur als erste Option verwendet. Wenn nicht eindeutige Hash-Codes verwendet werden, wird der Gleichheitsoperator immer als ein Fall verwendet, der auf Gleichheit zurückgeht.
Wie ich schon sagte, kann dies für Ihre Situation relevant sein oder nicht, aber wenn es das ist, ist es ein praktischer Tipp.
UPDATE
zu demonstrieren, haben wir eine Hashtable:
Key: Object Ein (Hashcode 1),
A1 Wert Objekt
Key: Objekt B (Hashcode 1), Wert Object B1
Key: Object C (Hashcode 1), den Wert Object C1
Key: Object D (Hashcode 2), den Wert Ob jekt D1
Key: Object E (Hashcode 3), Wert Objekt E1
Wenn ich die Hash-Tabelle für das Objekt mit dem Schlüssel des Objekts A nennen, wird das Objekt A1 nach 2 Stufen zurückgeführt werden, ein Anruf für hashcode 1, dann eine Gleichheitsprüfung auf dem Schlüssel-Objekt, da es mit dem Hash-Code 1
als ich rufe Sie die Hash-Tabelle für das Objekt mit dem Schlüssel des Objekt D keinen eindeutiger Schlüssel ist, wird das Objekt D1 nach dem 1. Schritt zurück , ein Hash-Lookup
Fazit: Nie persistieren oder das Ergebnis von 'GetHashCode()' übertragen. Verwenden Sie es nur für den vorgesehenen Zweck: um die Verwendung von Hashtabellen zu erleichtern. –