webentwicklung-frage-antwort-db.com.de

Überschreiben von GetHashCode

Wie Sie wissen, gibt GetHashCode einen semi-eindeutigen Wert zurück, mit dem eine Objektinstanz in einer Auflistung identifiziert werden kann. Es empfiehlt sich, diese Methode zu überschreiben und Ihre eigene zu implementieren.

Meine Frage lautet: Überschreiben Sie diese Methode, wenn Sie an benutzerdefinierten Objekten arbeiten? Wenn ja, welchen Algorithmus verwenden Sie, um die eindeutige ID zu generieren?

Ich habe darüber nachgedacht, eine GUID zu generieren und dann ganzzahlige Daten von diesem Identifikator zu erhalten.

30
Den Delimarsky

Wenn Sie GetHashCode() überschreiben, müssen Sie auch Equals(), operator== und operator!= überschreiben. Achten Sie darauf, alle Anforderungen für diese Methoden zu erfüllen.

Die Richtlinien sind hier auf MSDN . Wichtigstes Zitat: 

Es ist keine gute Idee, den Operator == in nicht unveränderlichen Typen zu überschreiben. 

25
Henk Holterman

Sie können das Programm erneut starten, indem Sie GetHashCode (), Equals e operatore eingeben.

Accedi a questo menu premendoAlt+Insert.

http://www.jetbrains.com/resharper/webhelp/Code_Generation__Equality_Members.html

29
Winston

In meinem persönlichen Gebrauch überschreibe ich nur, wenn ich gleiches Verfahren überschreibe. Im Allgemeinen mache ich dies für Objekte, von denen ich weiß, dass ich eine LINQ to Objects-Abfrage oder eine andere Vergleichsoperation ausführen kann.

Ich gebe normalerweise den Primärschlüsselwert zurück, wenn ein LINQ to SQL-Entity- oder DTO-Objekt angegeben wird. Was immer Sie zurückgeben, wenn Sie den Wert nicht lokal speichern, kann dies zu einem unerwarteten Ergebnis führen.

HTH.

1
Brian Mains

Normalerweise würde ich die Hashcode- und Gleichheitsüberprüfungsmethoden für Datenklassen (d. H. Klassen, bei denen die Wertesemantik sinnvoll ist) außer Kraft setzen. Werfen Sie einen Blick auf this question für eine gemeinsame Implementierung. Wenn Sie Hashcode überschreiben, überschreiben Sie gleich. Die Verwendung einer GUID ist eine ziemlich schreckliche Idee, da zwei Objekte, die unterschiedliche Instanzen sind, aber denselben value haben, denselben Hashcode haben und equals den Wert true haben.

1
brain

sie müssen GetHashCode nur überschreiben, wenn Sie Equals überschreiben. Der Standard-GetHashCode wird von der Laufzeitumgebung auf ähnliche Weise implementiert, wie Sie es möchten - jedem Objekt ist ein ausgeblendetes Feld zugeordnet, das von der Laufzeitumgebung zugewiesen wird.

So überschreiben Sie GetHashCode

Eigentlich sollte Ihre IDE dies für Sie tun - wenn Sie "überschreiben GetHashCode" eingeben, sollte die IDE diesen Zusatzcode generieren. Visual Studio macht dies nicht, aber SharpDevelop macht es.

0
Martin Konicek