Нет, это не ошибка.
В стек сначала будет добавлен последний добавленный элемент. Поэтому, когда вы переходите к заполнению нового стека, сначала добавляете новый элемент. Поскольку этот элемент добавлен сначала, он теперь будет «самым старым» элементом в новом стеке, хотя это был «самый новый» элемент в старом стеке.
Восстанавливается полностью ожидаемое поведение.
Если у вас была очередь, то запись var newQueue = new Queue<T>(oldQueue);
фактически создаст копию. Очереди дают самый старый предмет, поэтому самый старый элемент в старой очереди становится самым старым элементом в новой очереди. То же самое относится и к списку.
У вас, похоже, создается впечатление, что существует какой-то конструктор копирования, в котором стек занимает еще один стек и делает копию. Это неверно, он просто принимает IEnumerable<T>
в качестве своего ввода. Для List
и Queue
это приводит к копированию, так как стеки просто влияют на реверсирование элементов.
Я понятия не имею, что означают эти скриншоты. Подумайте о создании [минимального тестового сценария] (http://sscce.org) для изучения/демонстрации того, о чем вы говорите ... –
Не совсем понятно вопрос из приведенных данных. – edtheprogrammerguy