如何在c#中通过索引获取堆栈项
本文关键字:索引 获取 堆栈 | 更新日期: 2023-09-27 17:58:13
我是C#的新手。是否可以像C#中的Lists那样通过索引获取堆栈项?
谢谢,
您可以使用LINQ:来实现它
Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
stack.Push(3);
stack.Push(4);
int top = stack.ElementAt(0); // Returns 4
int next = stack.ElementAt(1); // Returns 3
然而,如果您发现自己试图通过索引访问堆栈上的元素,那么您肯定做错了什么,您应该重新设计您的解决方案。
如Matias所示,使用ElementAt()是可能的。你也可以使用Peek来查看顶部的内容,而不需要弹出它。你也可以转换为数组并通过索引获得值。
var s = new Stack<int>();
s.Push(1);
s.Push(2);
var value = s.ToArray()[1];
不过,你应该问问自己这是否明智。您所能做的就是在某个时间点获取堆栈的快照。还有一些并发问题需要考虑。
更新:
看起来马蒂亚斯和我得出了非常相似的答案。关于这个问题所问的问题,他的答案比较正确。ToArray()方法为您提供了一个可能更稳定的一致快照。后续对ElementAt()的调用可能会给出不同的答案,并且如果堆栈在调用之间弹出,则可能引发异常。
通过调用ElementAt<T>(Int32)
或ElementAtOrDefault(Int32)
方法,可以通过索引选择堆栈的元素。
顺便说一句,如果你是C#的新手,一定要试着在找到答案
- MSDN
- github
- referencesource.microsoft.com
它通常比在SO=)上查找信息更快、更可靠