Eventuell als Zusatzinfo noch:
es gibt bestimmte IEnumerable Methoden, die verzögert ausgeführt werden und andere direkt.
Verzögerte Ausführung heißt, dass beim Durchlaufen erst die Elemente der Quelle durchlaufen werden (und das auch nur 1mal für einen kompletten Durchlauf) - z.B. Where oder Take
Einige Operationen können das nicht - zum Beispiel Reverse. Hierbei ist die Implementierung in .Net so, dass die Quelle ausgelesen und in ein Array gepackt wird. Dieses wird dann vom letzten bis zum ersten Element zurückgegeben.
Wenn man beachtet, dass hinter IEnumerable auch theoretisch eine unendliche Menge stecken kann, sieht man, dass bestimmte Operationen damit keinen Sinn machen würden.
Für eine for in Schleife spielt auch der Enumerator eine Rolle, welcher einen State hat - in dem Falle einer verketteten Liste könnte er also problemlos das aktuelle Element wissen, so dass du keinen
Schlemiel hast.