Was ist der beste Algorithmus für ein überschriebenes System.Object.GetHashCode?

In .NET System.Object.GetHashCode - Methode wird verwendet, in einer Menge von Orten, während der .NET base class libraries. Vor allem, wenn die Suche nach Elementen in einer Sammlung schnell oder zu bestimmen Geschlechter. Gibt es einen standard-Algorithmus/best-practice zur Umsetzung der GetHashCode override für meine benutzerdefinierte Klassen, damit ich nicht die Leistung beeinträchtigen?

Kommentar zu dem Problem - Öffnen
Nach dem Lesen dieser Frage und die Artikel unten, könnte ich implementieren, überschreiben von GetHashCode. Ich hoffe, dass es für andere hilfreich. Richtlinien und Regeln für die GetHashCode-geschrieben von Eric Lippert Kommentarautor: rene
"oder, um zu bestimmen, Gleichheit": Nein! Zwei Objekte mit gleichem hashcode sind nicht unbedingt gleich. Kommentarautor: Thomas Levesque
@ThomasLevesque Sie haben Recht, die zwei Objekte mit dem gleichen hash-code sind nicht unbedingt gleich. Aber immer noch GetHashCode() verwendet wird, in sehr vielen Implementierungen von Equals(). Das ist es, was ich meinte mit dieser Aussage. GetHashCode() in Equals() wird oft als eine Verknüpfung, um zu bestimmen, Ungleichheit, denn wenn zwei Objekte über eine verschiedenen - hash-code, den Sie haben, um Objekte, die nicht gleich sind und der rest der equality-check nicht ausgeführt. Kommentarautor: bitbonk
@bitbonk in der Regel, sowohl GetHashCode() und Equals() müssen sich auf alle Felder der beiden Objekte (Equals zu tun hat, wenn es die hashcodes gleich sind oder nicht-aktiviert). Weil dieser, ein Aufruf von GetHashCode() in Equals() ist oft redundant und könnte die Leistung reduzieren. die Equals() kann auch in der Lage sein, um Kurzschluss, so dass es viel schneller - aber in manchen Fällen die hashcodes können zwischengespeichert werden, so dass die GetHashCode() überprüfen Sie schneller und so lohnt sich. Siehe diese Frage für mehr. Kommentarautor: NotEnoughData

InformationsquelleAutor der Frage bitbonk | 2008-11-04

Schreibe einen Kommentar