Das OrderedDictionaryüberlädt die Indizierungsoperation, sodass die Indizierung mit einer Ganzzahl Ndas Element in Position bringt N, während die Indizierung mit einem Objectdas Element abruft, das diesem Objekt entspricht. Wenn Sie einen OrderedDictionary<int, string>aufgerufenen myDictund 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 Pointund zu umschließen, Rectanglebedeutet, dass für myDict.ByKey[0] = "Wally"die Arbeit myDict.ByKeyein 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 KeyValuePairin einer Aufzählung zurückgegebenen Objekte durchsuchen zu müssen .
SortedDictionary<TKey, TValue>: msdn.microsoft.com/en-us/library/f7fta44c.aspx