.NET中的stack.ToList() – 元素的顺序?

Stack上使用.ToList()扩展方法时,结果与弹出每个元素并添加到新列表(推送的内容相反)相同吗?

如果是这样,这是因为它实际上是迭代每个元素,还是内部反向存储元素并将数组滑入新的List

Stack本身没有ToList方法,它是Enumerable类的扩展方法。 由于这些扩展方法仅处理IEnumerable ,因此可以安全地假设ToList迭代堆栈的项目以创建新列表。

更新:我用Reflector检查过; Stack将其项目存储在一个数组中,最下面的元素位于索引0,但其Enumerator以相反的顺序迭代数组。 因此,从迭代器出来的第一个元素是堆栈的顶部。

ToList将按照与执行此操作相同的顺序迭代:

 foreach (T item in stack) 

据我所知, GetEnumerator()的文档没有明确说明顺序,但是示例显示它将像弹出一样迭代。 因此,如果您按1,2,3,4,5,那么ToList将为您提供ToList