.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
。