Порядок, в котором возвращаются значения, скорее всего (но не гарантируется) будет тем же порядком, в котором хранятся ключи.Как упомянул Хенк Холтерман, это зависит от реализации и на него не следует полагаться.
Запись MSDN для словаря очень четко говорит об этом:
Для целейперечисления, каждый элемент в словаре обрабатывается как структура KeyValuePair, представляющая значение и его ключ.Порядок, в котором элементы возвращаются, не определен.
EDIT Словарь может заманить вас в ложное чувство безопасности, по-видимому, возвращая значения в порядке их добавления, но нижеПроходной тест показывает, что его поведение на самом деле гораздо более тонкое:
[TestMethod]
public void TestDictionary()
{
var dictionary1 = new Dictionary<int, int>();
var dictionary2 = new Dictionary<int, int>();
for(int i = 0; i < 10; i++){
dictionary1[i] = i;
if (i != 3)
dictionary2[i] = i;
}
dictionary1.Remove(3);
dictionary1[3] = 3;
dictionary2[3] = 3;
CollectionAssert.AreEqual(new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, dictionary1.Values);
CollectionAssert.AreEqual(new[] { 0, 1, 2, 4, 5, 6, 7, 8, 9, 3 }, dictionary2.Values);
}
Если вы внимательно посмотрите на код, вы увидите, что порядок элементов в словаре не соответствует порядку добавления элементов, но порядок, в котором элементы первоначально добавляются .
Я не хочу вообразить, что происходит с несколькими вставками и удалениями с течением времени.Если вы полагаетесь на это недокументированное поведение, я думаю, что вы будете должны миру эквивалент государственного долга США с плохими смещениями кодов .