Das Programm hat mit dieser Implementierung gearbeitet:
%Vor%Aber weil ich Instrument im Dictionary benutzen muss, habe ich beschlossen, equals / hashcode zu implementieren:
%Vor%Jetzt funktioniert das Programm nicht mehr. An solchen oder ähnlichen Orten erhalte ich "KeyNotFoundException":
%Vor%Ist es möglich, dass einige Teile des Codes davon ausgehen, dass equals und hashcode NICHT implementiert sind? Oder wahrscheinlich habe ich sie einfach falsch umgesetzt? Entschuldigung, ich bin nicht mit solchen erweiterten Funktionen in C # als letztes Stück Code vertraut und weiß nicht, wie es mit equals oder hashCode verbunden ist.
Zuerst , anstatt cache.Keys.Any
zu verwenden, können Sie einfach ContainsKey
Die erste iteriert über die gesamte Schlüsselliste - O (n), während die zweite die eingebaute Implementierung der Hash-Tabelle - O (1) verwendet.
Zweite , überprüfen Sie in Ihrer Implementierung, ob ein Nullverweis vorhanden ist:
%Vor%Ansonsten kann ich kein Problem sehen.
Aber weil ich Instrument im Dictionary benutzen muss, habe ich beschlossen, equals / hashcode
zu implementieren
Das ist der falsche Grund. Ihre Klasse verfügt bereits über Implementierungen für Equality und GetHashCode, die für die Verwendung in einem Dictionary geeignet, effizient und getestet sind.
Habe ich Equals () / GetHashCode () korrekt implementiert?
Nein. Ihnen fehlt eine Überladung für ==
, mit der Sie beginnen möchten. Und es wird nur zuverlässig sein, wenn Sie Instrument unwandelbar machen.
Siehe auch diese MSDN-Empfehlung . Beachten Sie die "Garantien von Gleichen" und
Das Überschreiben von Operator == in nicht unveränderlichen Typen wird nicht empfohlen.
Tags und Links .net c# gethashcode