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

Bon*_*nal 0 c# indexing stack list

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

谢谢,

Mat*_*ero 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
Run Code Online (Sandbox Code Playgroud)

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

  • 我可能是错的,但是C#中的Stack实现为数组和两个位置变量的开始和结束(https://msdn.microsoft.com/zh-cn/library/ms379571(v=vs.80).aspx)。如果是真的,我看不到按索引获取元素的问题,就像在简单数组中发生的情况一样。不用多说,我很惊讶Stack本身没有这样的方法,而您必须通过Linq extension来实现。 (2认同)
  • _“但是,如果您发现自己试图通过索引访问堆栈上的元素,那么您肯定做错了什么,您应该重新设计您的解决方案”_ - 这只是过度概括了事情。有一些完全有效的用例必须通过索引检查堆栈,具体取决于您使用它的用途。我现在的用例:将此自定义解释器从 Java 转换为 C#:http://craftinginterpreters.com/resolving-and-binding.html#resolving-variable-expressions (2认同)