Tendría que estar en desacuerdo con todas las respuestas hasta ahora.
En primer lugar, garantiza el estándar C# 3.0 el orden de foreach en una matriz:
El orden en que foreach atraviesa los elementos de una matriz, es como sigue: Para las matrices unidimensionales elementos son atravesadas en el aumento de orden de índice, comenzando con el índice 0 y terminando con índice Longitud - 1. Para matrices multidimensionales, los elementos se atravesados de tal manera que los índices de la dimensión más a la derecha se incrementan primero, luego, la siguiente dimensión a la izquierda, y así sucesivamente a la izquierda.
- C# Language Specification Version 3.0, página 240.
En segundo lugar, en los objetos, foreach (C#) y para cada uno (VB.NET) de trabajo mediante el uso de la MoveNext, RESET, y actuales miembros de un objeto (source) Estos son típicamente parte de la interfaz de IEnumerator.
En las colecciones que tienen un pedido (léase: cosas que implementan IList o IList (T)), esto significa que los elementos se devolverán en el orden en que el almacén de respaldo los almacena.
+1, ya que esto es correcto para todas las matrices y listas estándar. Aunque es pedante, una clase personalizada que implemente IList (T) puede implementar su propio enumerador para devolver los elementos en el orden que desee. – Joe
¡Excelente! Gracias. Acabo de ganar una apuesta contra un colega :) –
Esto es cierto para Array, pero no necesariamente para otras colecciones. –