Ответ 1
Сам по себе Stack
не имеет метода ToList
, это метод расширения из класса Enumerable
. Поскольку эти методы расширения имеют дело только с IEnumerable<T>
, можно предположить, что ToList
выполняет итерации по элементам стека для создания нового списка (или, по крайней мере, действует точно так же, как если бы - методы Enumerable
иногда проверяют введите аргумент и используйте оптимизированную реализацию).
Интересно, что в документации не указано, в каком порядке перечислен стек, но пример кода показывает порядок, а примеры являются частью документации. Кроме того, на практике изменение порядка итераций нарушило бы настолько много кода, что его было бы слишком рискованно менять сейчас.
Я также проверил с отражателем; Stack<T>
хранит свои элементы в массиве с самым нижним элементом с индексом 0, но его Enumerator
выполняет итерацию массива в обратном порядке. Поэтому первым элементом, который выходит из итератора, является верхняя часть стека.