Я искал способ, чтобы мой Dictionary
перечислял свою KeyValuePair
в том же порядке, в котором они были добавлены. В документации по словарю четко указано, что:
В целях перечисления каждый элемент в словаре рассматривается как структура
KeyValuePair<TKey, TValue>
представляющая значение и его ключ. Порядок возврата товаров не определен.
Я узнал, что мне нужен OrderedDictionary
, но, будучи скептиком, я решил попробовать это сам:
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);
}
Выход:
OrderedDictionary
key0, value0
key1, value1
key2, value2
...
Dictionary
key0, value0
key1, value1
key2, value2
...
Как видите, оба заказаны, и это поднимает два вопроса:
В каком случае Dictionary
дает другой порядок, в котором добавляются значения? Мой первый цикл foreach
уверяет меня в том, что я получаю KeyValuePair
в том же порядке, или мне нужно использовать индекс?