OrdenadoDicionário e Dicionário

Eu estava procurando uma maneira de ter meuDictionary enumerar suaKeyValuePair na mesma ordem em que foram adicionados. Agora,Doc do dicionário afirmar claramente que:

Para fins de enumeração, cada item no dicionário é tratado como umKeyValuePair<TKey, TValue> estrutura representando um valor e sua chave. A ordem em que os itens são retornados é indefinida.

Eu descobri que o que eu precisava era de umOrderedDictionary, mas sendo o cético que sou, decidi tentar por mim mesmo:

OrderedDictionary od = new OrderedDictionary();
Dictionary<String, String> d = new Dictionary<String, String>();

for (int i = 0; i < 10; i++ )
{
    od.Add("key"+i,"value"+i);
    d.Add("key"+i,"value"+i);
}

System.Console.WriteLine("OrderedDictionary");
foreach (DictionaryEntry de in od) {
    System.Console.WriteLine(de.Key +", " +de.Value);
}

System.Console.WriteLine("Dictionary");
foreach (var tmp in d) {
    System.Console.WriteLine(tmp.Key +", " + tmp.Value);
}

Saída:

OrderedDictionary
key0, value0
key1, value1
key2, value2
...

Dictionary
key0, value0
key1, value1
key2, value2
...

Como você pode ver, ambos são ordenados, e isso levanta 2 questões:
Em que casos oDictionary dar uma ordem diferente daquela em que os valores são adicionados? Meu primeiroforeach loop me assegurar para recuperar o meuKeyValuePair na mesma ordem, ou eu tenho que usar o índice?

questionAnswers(1)

yourAnswerToTheQuestion