Я думаю, вы ошибаетесь.
Это не значит, что Stack<T>.Push
внутренне вставляет элемент в начало его внутреннего массива (это не так). Скорее, он перечисляет сверху вниз, так как это способ интуитивно перечислять через стек (представьте себе стопку блинов: вы начинаете сверху и идете вниз).
Если вы посмотрите на содержимое коллекции из отладчика Visual Studio, я думаю, что он отобразит их вам в порядке их перечисления, а не в порядке их внутреннего хранения *.
Взгляните на метод Stack<T>.Push
в Reflector , и вы увидите, что код в основном соответствует ожидаемому:
// (code to check array size)
this._array[this._size++] = item;
// (code to update internal version number)
Таким образом, стек внутренне добавляет новые элементы в конец своего внутреннего массива. Вы запутались в классе Stack<T>.Enumerator
, а не в классе Stack<T>
.
* Я не знаю, верно ли это вообще, но это верно для Stack<T>
; см. превосходный ответ Ханса Пассанта о причине.