La OrderedDictionary
surcharge de l'opération d'indexation de sorte que l'indexation avec un entier N
mettra l'élément en position N
, tandis que l'indexation avec un Object
récupérera l'élément correspondant à cet objet. Si l'on devait créer un OrderedDictionary<int, string>
appel myDict
et ajouter des éléments (1, "George") et (0, "Fred") dans cet ordre, devrait myDict[0]
retourner "George" ou "Fred"?
Un tel problème aurait pu être résolu en imposant une contrainte de classe au type de clé. D'un autre côté, une grande partie de l'utilité des collections génériques découle de leur capacité à travailler efficacement avec les types de valeur. Imposer une contrainte de classe au type de clé semble un peu moche.
Si la classe n'avait pas à être conforme CLS mais devait simplement travailler avec vb.net, une conception judicieuse aurait pu être d'utiliser des propriétés indexées nommées. Ainsi, dans l'exemple ci-dessus, myDict.ByKey[0]
aurait donné "Fred" et myDict.BySequence[0]
aurait donné "George". Malheureusement, les langages comme C # ne prennent pas en charge les propriétés indexées nommées. Alors que l'on aurait pu claquer quelque chose pour permettre l'utilisation de la syntaxe ci-dessus même sans ces propriétés, la décision malheureuse d'envelopper les champs de structures comme Point
et Rectangle
signifie que pour myDict.ByKey[0] = "Wally"
fonctionner, myDict.ByKey
devrait renvoyer un nouvel objet de classe. Une structure serait plus efficace, mais les compilateurs rejetteraient ce qui ressemblait à une écriture dans une structure en lecture seule (bien que la propriété ne modifie pas la structure renvoyée parByKey
, mais modifiez plutôt la collection à laquelle il contient une référence).
Personnellement, je pense qu'un objet dictionnaire-ish qui a été spécifié comme gardant la trace de l'ordre d'insertion serait une bonne chose à avoir; Je voudrais également avoir un objet dictionnaire-ish qui pourrait facilement retourner la clé associée à une clé particulière (de sorte que, par exemple, si l'on a un dictionnaire qui ne respecte pas la casse et a ajouté un enregistrement avec une clé de "GEORGE", un pourrait demander au dictionnaire quelle clé est associée à "George" sans avoir à parcourir tous les KeyValuePair
objets retournés dans une énumération.
SortedDictionary<TKey, TValue>
: msdn.microsoft.com/en-us/library/f7fta44c.aspx