当使用.ToList()
上的扩展方法Stack<T>
,结果与弹出每个元素并添加到新列表(与推送的内容相反)相同吗?
如果是这样,这是因为它确实在迭代每个元素,还是因为它在内部反向存储元素并将数组滑入新的数组List<T>
?
Stack
本身没有一个ToList
方法,它是来自的扩展方法Enumerable
班级。由于这些扩展方法只处理IEnumerable<T>
,可以安全地假设ToList
迭代堆栈中的项目以创建新列表(或者至少表现得像它一样 -Enumerable
方法有时会测试参数的类型并使用优化的实现)。
有趣的是,文档似乎没有直接说明堆栈的枚举顺序,但示例代码确实显示了顺序,并且示例是文档的一部分。此外,在实践中,更改迭代顺序会破坏大量代码,因此现在更改的风险太大。
我还检查了 Reflector;Stack<T>
将其项目存储在数组中,最底部元素位于索引 0 处,但其Enumerator
迭代数组以相反的顺序。因此,从迭代器中出来的第一个元素是堆栈的顶部。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)