A OrderedDictionarysobrecarga sobrecarrega a operação de indexação para que a indexação com um número inteiro Ncoloque o item na posição N, enquanto a indexação com um Objectrecuperará o item correspondente a esse objeto. Se alguém criar um OrderedDictionary<int, string>chamado myDicte adicionar itens (1, "George") e (0, "Fred") nessa ordem, myDict[0]retornará "George" ou "Fred"?
Esse problema poderia ter sido resolvido impondo uma restrição de classe ao tipo de chave. Por outro lado, grande parte da utilidade de coleções genéricas decorre de sua capacidade de trabalhar com eficiência com tipos de valor. A imposição de uma restrição de classe ao tipo de chave pareceria um pouco feia.
Se a classe não tivesse que ser compatível com CLS, mas tivesse apenas que trabalhar com vb.net, um design sensato poderia ser o de usar propriedades indexadas nomeadas. Assim, no exemplo acima, myDict.ByKey[0]teria produzido "Fred" e myDict.BySequence[0]teria "George". Infelizmente, idiomas como C # não oferecem suporte a propriedades indexadas nomeadas. Embora alguém possa ter julgado algo para permitir o uso da sintaxe acima, mesmo sem essas propriedades, a infeliz decisão de agrupar os campos de estruturas como Pointe Rectanglesignifica que, para myDict.ByKey[0] = "Wally"funcionar, myDict.ByKeyteria que retornar um novo objeto de classe. Uma estrutura seria mais eficiente, mas os compiladores rejeitariam o que parecia ser uma gravação em uma estrutura somente leitura (apesar de a propriedade não modificar a estrutura retornada porByKey, mas modifique a coleção à qual ele contém uma referência).
Pessoalmente, acho que um objeto dicionário-ish que foi especificado para acompanhar a ordem de inserção seria uma coisa agradável de se ter; Eu também gostaria de ter um objeto dictionary-ish que possa retornar facilmente a chave associada a uma chave específica (de modo que, por exemplo, se alguém tiver um dicionário que não diferencia maiúsculas de minúsculas e tenha adicionado um registro com a chave "GEORGE", um poderia perguntar ao dicionário qual chave está associada a "George" sem precisar pesquisar todos os KeyValuePairobjetos retornados em uma enumeração.
SortedDictionary<TKey, TValue>: msdn.microsoft.com/pt-br/library/f7fta44c.aspx