如何在c#中通过索引获取堆栈项

本文关键字:索引 获取 堆栈 | 更新日期: 2023-09-27 17:58:13

我是C#的新手。是否可以像C#中的Lists那样通过索引获取堆栈项?

谢谢,

如何在c#中通过索引获取堆栈项

您可以使用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#的新手,一定要试着在找到答案

  1. MSDN
  2. github
  3. referencesource.microsoft.com

它通常比在SO=)上查找信息更快、更可靠