Ты пробовал с помощью нажатия клавиш ... нажата клавиша - зло
Я должен был бы не согласиться со всеми ответами до сих пор.
Во-первых, стандарт C# 3.0 гарантирует порядок foreach на массиве:
Порядок, в котором foreach пересекает элементы массива, следующие: Для одно-мерных массивов элементы пересечены в увеличивающемся индексном порядке, начиная с индекса 0 и заканчивающийся индексной Длиной – 1. Для многомерных массивов элементы пересечены таким образом, что индексы самого правого размера увеличены сначала, затем следующий левый размер, и так далее налево.
- Версия 3.0 Спецификации языка C#, страница 240.
Во-вторых, на объектах, foreach (C#) и Для Каждого (VB.NET) работают при помощи MoveNext, Сброса и текущих элементов на объекте (источник). Это обычно часть интерфейса IEnumerator.
В наборах, которые имеют порядок (чтение: вещи, которые реализуют IList или IList (T)), это означает, что элементы будут возвращены в порядке, что запоминающее устройство хранит их.
Нет никаких гарантий. Большинство реализаций списка/массива будет возвращать значения в порядке, но существуют определенно исключения, особенно в некоторых менее общих классах набора. (Например, в C5, много наборов возвращают значения в совсем других заказах, чем они были добавлены при перечислении.)
Никакая гарантия дизайном. foreach предназначается для перечисления без порядка и подразумевает, что время выполнения могло бы даже обработать несколько элементов параллельно. Вы никогда не должны полагаться ни на какой порядок перечисления.