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

时间:2016-07-22 20:49:56

标签: c# list indexing stack

我是C#的新手。 是否可以通过索引获取堆栈项,就像我们在C#中的列表中所做的那样?

谢谢,

3 个答案:

答案 0 :(得分:5)

您可以使用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

但是,如果你发现自己试图通过索引访问堆栈上的元素,那么你肯定做错了什么,你应该重新设计你的解决方案。

答案 1 :(得分:0)

可以使用Matias所示的ElementAt()。您也可以使用Peek来查看顶部的内容而不会弹出它。您还可以转换为数组并通过索引获取值。

var s = new Stack<int>();
s.Push(1);
s.Push(2);

var value = s.ToArray()[1];

但你应该问问自己这是否明智。您将能够做的就是在某个时间点获取堆栈的快照。还有一些并发问题需要考虑。

<强>更新

似乎像Matias和我想出了非常相似的答案。对于问题的要求,他是一个更正确的答案。 ToArray()方法为您提供可能更稳定的一致快照。对ElementAt()的后续调用可能会给出不同的答案,如果在调用之间弹出了堆栈,则可能会抛出异常。

答案 2 :(得分:0)

可以通过调用ElementAt(Int32)或ElementAtOrDefault(Int32)方法按索引选择堆栈元素。

作为旁注,如果您是C#的新手,请始终尝试在

找到答案

1)MSDN 2)referencesource.microsoft.com

通常更快,更可靠,然后在SO =)

上查找信息