Das OrderedDictionary
überlädt die Indizierungsoperation, sodass die Indizierung mit einer Ganzzahl N
das Element in Position bringt N
, während die Indizierung mit einem Object
das Element abruft, das diesem Objekt entspricht. Wenn Sie einen OrderedDictionary<int, string>
aufgerufenen myDict
und hinzugefügten Artikel (1, "George") und (0, "Fred") in dieser Reihenfolge erstellen , sollten Sie myDict[0]
"George" oder "Fred" zurückgeben?
Ein solches Problem hätte gelöst werden können, indem dem Schlüsseltyp eine Klassenbeschränkung auferlegt wurde. Andererseits beruht ein Großteil des Nutzens von generischen Sammlungen auf ihrer Fähigkeit, effizient mit Werttypen zu arbeiten. Das Auferlegen einer Klassenbeschränkung für den Schlüsseltyp scheint ein wenig hässlich zu sein.
Wenn die Klasse nicht CLS-kompatibel sein musste, sondern nur mit vb.net arbeiten musste, wäre es möglicherweise sinnvoll gewesen, benannte indizierte Eigenschaften zu verwenden. So hätte im obigen Beispiel myDict.ByKey[0]
"Fred" und myDict.BySequence[0]
"George" ergeben. Leider unterstützen Sprachen wie C # keine benannten indizierten Eigenschaften. Zwar hätte man auch ohne solche Eigenschaften etwas verwerfen können, um die Verwendung der obigen Syntax zuzulassen, aber die unglückliche Entscheidung, die Felder von Strukturen wie Point
und zu umschließen, Rectangle
bedeutet, dass für myDict.ByKey[0] = "Wally"
die Arbeit myDict.ByKey
ein neues Klassenobjekt zurückgegeben werden muss. Eine Struktur wäre effizienter, aber Compiler würden einen Schreibzugriff auf eine schreibgeschützte Struktur ablehnen (ungeachtet dessen, dass die Eigenschaft die von zurückgegebene Struktur nicht ändern würdeByKey
ändern Sie stattdessen die Sammlung, auf die sie einen Verweis enthält.
Persönlich denke ich, dass ein Dictionary-ish-Objekt, das so spezifiziert wurde, dass es die Reihenfolge der Einfügungen verfolgt, eine nette Sache wäre; Ich hätte auch gerne ein Dictionary-ish-Objekt, das den Schlüssel, der einem bestimmten Schlüssel zugeordnet ist, problemlos zurückgeben könnte (z. B., wenn bei einem Dictionary die Groß- und Kleinschreibung nicht beachtet wird und ein Datensatz mit dem Schlüssel "GEORGE" hinzugefügt wurde) könnte das Wörterbuch fragen, welcher Schlüssel mit "George" verknüpft ist, ohne alle KeyValuePair
in einer Aufzählung zurückgegebenen Objekte durchsuchen zu müssen .
SortedDictionary<TKey, TValue>
: msdn.microsoft.com/en-us/library/f7fta44c.aspx