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

Jam*_* M. 15 .net c# stack list

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

如果是这样,这是因为它实际上是迭代每个元素,还是内部反向存储元素并将数组转换为新元素List<T>

Mat*_*nen 15

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

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

  • 为什么假设这样安全?我无法在文档中找到任何说明"Stack <T>"的枚举器按顺序排列的内容,但也许我看起来不够好...... (2认同)

Jon*_*eet 7

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

foreach (T item in stack)
Run Code Online (Sandbox Code Playgroud)

对文档GetEnumerator()不明确说明的顺序,据我所知道的,但例子表明,它会遍历就好像雨后春笋般冒出.因此,如果您按1,2,3,4,5,那么ToList将给你5,4,3,2,1.