Las OrderedDictionarysobrecargas de la operación de indexación para que la indexación con un entero Nva a conseguir el artículo en su posición N, mientras que la indexación con un Objectrecuperará el elemento que corresponde a dicha objeto. Si uno creara un elemento OrderedDictionary<int, string>llamado myDicty agregado (1, "George") y (0, "Fred") en ese orden, ¿debería myDict[0]devolver "George" o "Fred"?
Tal problema podría haberse resuelto imponiendo una restricción de clase en el tipo de clave. Por otro lado, gran parte de la utilidad de las colecciones genéricas proviene de su capacidad para trabajar eficientemente con tipos de valor. Imponer una restricción de clase en el tipo de clave parecería un poco feo.
Si la clase no tuviera que ser compatible con CLS, sino que simplemente tuviera que trabajar con vb.net, un diseño sensato podría haber sido utilizado con propiedades indexadas con nombre. Por lo tanto, en el ejemplo anterior, myDict.ByKey[0]habría dado "Fred", y myDict.BySequence[0]habría dado "George". Desafortunadamente, lenguajes como C # no admiten propiedades indexadas con nombre. Si bien uno podría haber ignorado algo para permitir el uso de la sintaxis anterior incluso sin tales propiedades, la desafortunada decisión de envolver los campos de estructuras como Pointy Rectanglesignifica que, para myDict.ByKey[0] = "Wally"trabajar, myDict.ByKeytendría que devolver un nuevo objeto de clase. Una estructura sería más eficiente, pero los compiladores rechazarían lo que parecía ser una escritura en una estructura de solo lectura (a pesar de que la propiedad no modificaría la estructura devuelta porByKey, pero modifica la colección a la que contiene una referencia).
Personalmente, creo que sería bueno tener un objeto de diccionario que se especificara como seguimiento del orden de inserción; También me gustaría tener un objeto de diccionario que pueda devolver fácilmente la clave asociada a una clave particular (de modo que, por ejemplo, si uno tiene un diccionario que no distingue entre mayúsculas y minúsculas y ha agregado un registro con una clave de "GEORGE", uno podría preguntarle al diccionario qué clave está asociada con "George" sin tener que buscar a través de todos los KeyValuePairobjetos devueltos en una enumeración.
SortedDictionary<TKey, TValue>: msdn.microsoft.com/en-us/library/f7fta44c.aspx