Do OrderedDictionaryprzeciążenia operacja indeksowania tak że indeksowanie z całkowitą Ndostanie element w pozycji N, podczas indeksowania ze związkiem Objectbędzie odzyskać pozycję coresponding do tego obiektu. Gdyby stworzyć OrderedDictionary<int, string>nazywa myDicti dodał egzemplarze (1, „George”) i (0, „Fred”) w tej kolejności, należy myDict[0]wrócić „George” lub „Fred”?
Taki problem można rozwiązać, nakładając ograniczenie klasy na typ klucza. Z drugiej strony duża część użyteczności zbiorów ogólnych wynika z ich zdolności do wydajnej pracy z typami wartości. Nałożenie ograniczenia klasowego na typ klucza wydaje się trochę brzydkie.
Gdyby klasa nie musiała być zgodna z CLS, ale po prostu musiała współpracować z vb.net, rozsądnym projektem mogłoby być użycie nazwanych właściwości indeksowanych. Tak więc w powyższym przykładzie myDict.ByKey[0]dałbym „Fred”, a myDict.BySequence[0]dałby „George”. Niestety, języki takie jak C # nie obsługują nazwanych indeksowanych właściwości. Podczas gdy można było zakłócać coś, co pozwala na użycie powyższej składni, nawet bez takich właściwości, niefortunna decyzja o zawinięciu pól struktur takich jak Pointi Rectangleoznacza, że myDict.ByKey[0] = "Wally"aby działać, myDict.ByKeymusiałaby zwrócić obiekt nowej klasy. Struktura byłaby bardziej wydajna, ale kompilatory odrzuciłyby coś, co wyglądało jak zapis do struktury tylko do odczytu (mimo że właściwość nie zmodyfikowałaby struktury zwróconej przezByKey, ale zamiast tego zmodyfikuj kolekcję, do której zawiera odwołanie).
Osobiście uważam, że dobrze byłoby mieć słownikowy obiekt, który został określony jako śledzenie kolejności wstawiania; Chciałbym również mieć obiekt słownikowy, który mógłby łatwo zwrócić klucz powiązany z określonym kluczem (tak, że np. Jeśli ktoś ma słownik bez rozróżniania wielkości liter i dodał rekord z kluczem „GEORGE”, jeden może zapytać słownik, który klucz jest powiązany z „George”, bez konieczności przeszukiwania wszystkich KeyValuePairobiektów zwróconych w wyliczeniu.
SortedDictionary<TKey, TValue>: msdn.microsoft.com/en-us/library/f7fta44c.aspx