【发布时间】:2016-07-22 20:49:55
【问题描述】:
我是 C# 新手。 是否可以像我们在 C# 中的 Lists 中那样按索引获取堆栈项?
谢谢,
【问题讨论】:
我是 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
可以通过调用ElementAt<T>(Int32) 或ElementAtOrDefault(Int32) 方法按索引选择堆栈的元素。
附带说明,如果您是 C# 新手,请始终尝试在以下位置找到答案
这通常比在 SO =) 上查找信息更快、更可靠
【讨论】: