Wenn ich Objekte als Schlüssel für eine Dictionary
verwenden möchte, welche Methoden muss ich außer Kraft setzen, um sie auf eine bestimmte Weise zu vergleichen?Verwenden eines Objekts als generischer Dictionary-Schlüssel
sagen, dass ich eine eine Klasse, die Eigenschaften hat:
class Foo {
public string Name { get; set; }
public int FooID { get; set; }
// elided
}
Und ich möchte ein erstellen:
Dictionary<Foo, List<Stuff>>
Ich möchte Foo
Objekte mit demselben FooID
auf die gleiche Gruppe in Betracht gezogen werden. Welche Methoden muss ich in der Klasse Foo
überschreiben?
Zusammengefasst: Ich möchte Stuff
Objekte in Listen, gruppiert nach Foo
Objekte. Stuff
Objekte haben eine FooID
, um sie mit ihrer Kategorie zu verknüpfen.
+1 und ich habe nicht die Absicht, diesen Thread zu entführen, aber ich hatte den Eindruck, dass GetHashCode() FooId.GetHashCode() zurückgeben sollte. Ist das nicht das richtige Muster? –
@Ken - Nun, es muss nur ein int zurückgegeben werden, das die notwendigen Funktionen bietet. Welche FooID wird genauso gut funktionieren wie FooID.GetHashCode(). Als Implementierungsdetail ist Int32.GetHashCode() "gebe das zurück;". Für andere Typen (String etc), dann ja: .GetHashCode() wäre sehr nützlich. –
Danke! Ich ging mit dem IEqualityComparer wie es nur für den Dicarionary war, dass ich die überschriebenen Methoden brauchte. –
Dana