stack.ToList () в .NET - порядок элементов? - PullRequest
12 голосов
/ 13 апреля 2010

При использовании метода расширения .ToList() для Stack<T>, результат такой же, как выталкивание каждого элемента и добавление в новый список (в противоположность тому, что было передано)?

Если так, то это потому, что он действительно выполняет итерацию по каждому элементу, или он хранит элементы в обратном порядке и вставляет массив в новый List<T>?

Ответы [ 2 ]

11 голосов
/ 13 апреля 2010
Сам по себе

Stack не имеет метода ToList, это метод расширения из класса Enumerable. Поскольку эти методы расширения работают только с IEnumerable, можно предположить, что ToList перебирает элементы стека для создания нового списка.

Обновлено: я проверял Reflector; Stack<T> хранит свои элементы в массиве с самым нижним элементом с индексом 0, но его Enumerator выполняет итерацию массива в обратном порядке . Поэтому первым элементом, который выходит из итератора, является вершина стека.

5 голосов
/ 13 апреля 2010

ToList будет повторяться в том же порядке, как если бы вы сделали это:

foreach (T item in stack)

Документы для GetEnumerator() явно не указывают порядок, насколько я могу судить, но пример показывает, что он будет повторяться, как если бы он выдавался. Так что если вы нажмете 1, 2, 3, 4, 5, то ToList даст вам 5, 4, 3, 2, 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...