Dovrei essere in disaccordo con tutte le risposte finora.
Innanzitutto, lo standard C# 3.0 garantisce l'ordine di foreach su un array:
L'ordine in cui foreach attraversa gli elementi di una matrice, è segue: Per gli array monodimensionale elementi sono attraversati ascendente ordine di indice, partendo con indice 0 e termina con indice Lunghezza - 1. Per array multidimensionali, elementi attraversati tale che gli indici della dimensione destra sono aumentati primo, quindi la prossima dimensione a sinistra, e così via a sinistra.
- C# Language Specification Version 3.0, pagina 240.
In secondo luogo, sugli oggetti, foreach (C#) e per ogni (VB.NET) lavoro utilizzando il MoveNext, Reset, e attuali membri su un oggetto (source). Questi sono in genere parte dell'interfaccia IEnumerator.
Nelle raccolte che hanno un ordine (leggi: cose che implementano IList o IList (T)), ciò significa che gli elementi verranno restituiti nell'ordine in cui il backing store li memorizza.
+1 poiché è corretto per tutti gli array e gli elenchi standard. Sebbene sia pedante, una classe personalizzata che implementa IList (T) può implementare il proprio enumeratore per restituire gli elementi nell'ordine che preferisce. – Joe
Eccellente! Grazie. Ho appena vinto una scommessa contro un collega :) –
Questo vale per l'array, ma non necessariamente per altre raccolte. –