Hallo zusammen,
Also in einem meiner Programme speichere ich für jeden Typ ein bestimmtes Objekt in ein Dictionary, als Key wollte ich ursprünglich Type.GUID verwenden bis ich gemerkt habe das diese Property verdammt langsam ist. Imo verwende ich als Key des Dictionarys die Referenz des Typs was ja ohne weiteres geht da es jedes Type-Objekt ja nur ein mal gibt.
Allerdings - ich weiß nicht, per referenz indentifizieren ist irgentwie so unschön ^^. Habe jetzt gesehen das Type.GetHashCode() überschrieben ist. (Und auch genauso schnell wie referenz).
Weiß jemand von euch ob der Type HashCode unique ist? Im MSDN stand nichts dazu.
Bei Risiken oder Nebenwirkungen fressen sie die Packungsbeilage oder schlagen sie ihren Arzt mit ihrem Apoteker.
Habe jetzt gesehen das Type.GetHashCode() überschrieben ist. (Und auch genauso schnell wie referenz).
Das ist auch nicht besonders verwunderlich, weil die Indizierung per Referenz nichts anderes macht, als GetHashCode aufzurufen.
Insofern ist die Methode mit "Type" als Key schon die (IMHO einzig) richtige Wahl. Wenn du nur nach GetHashCode indizierst, dann musst du dich selbst um Hash-Kollisionen kümmern. Aber am Ende ist das genau das, was ein Dictionary eben von Hause aus relativ effizient tut.
gut dann wäre das geklart.
Bei Risiken oder Nebenwirkungen fressen sie die Packungsbeilage oder schlagen sie ihren Arzt mit ihrem Apoteker.
Erstell dir ein IEqualityComparer und übergib eine Instanz deinem Dictionary im Konstruktor.
Für Equals verwendest du Object.Equals(object, object) und für GetHashCode kannst du RuntimeHelpers::GetHashCode-Methode (Object) verwenden.
Damit hättest du immer einen eindeutigen Key (Object-/Referenzgleichheit)
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Hallo kleines_eichhoernchen,
alles steht und fällt doch damit, ob es für jeden Typ nur ein zugehöriges Objekt gibt. Sprich, dass wenn man mehrmals z.B. typeof (String) abruft, man immer ein und dasselbe Type-Objekt zurückbekommt. Oder wenn nicht, wenigstens Type.Equals und Type.GetHashCode so implementiert sind, dass die ganzen Objekte als gleich angesehen werden.
Wenn das so ist, kann man die Type.Objekte direkt als Key verwenden. Wenn nicht, verbessert dein Vorschlag die Situation nicht ... zumindest wenn ich nichts wesentliches übersehe.
herbivore