2016-07-22 57 views

回答

3

可以使用實現它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 

但是,如果你發現youself試圖訪問堆棧通過索引上的元素,那你肯定是做錯了什麼,和你應該重新設計你的解決方案。

+1

我可能是錯誤的,但堆棧在C#實現爲一個數組和兩個位置可變的開始和結束(https://msdn.microsoft.com/en-us/library/ms379571(v=vs.80 )的.aspx)。 如果這是真的,我沒有看到問題得到按索引元素類似於簡單數組中發生的元素。 更重要的是,我很驚訝Stack中沒有這樣的方法,你必須通過Linq擴展來完成。 –

0

如Matias所示,可以使用ElementAt()。您也可以使用Peek查看頂部的內容,而不用彈出它。您也可以轉換爲數組並通過索引獲取值。

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

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

你應該問自己,這是否明智,但。您將能夠做的就是在某個時間點獲取堆棧的快照。還有一些併發問題需要考慮。

UPDATE:

好像馬蒂亞斯,我想出了非常相似的答案。對於問題的問題,他是一個更正確的答案。 ToArray()方法爲您提供一致的快照,可能會更加穩定。隨後對ElementAt()的調用可能會給你不同的答案,並且如果堆棧已經在調用之間彈出,可能會引發異常。

+0

可以通過做'ElementAt' – TheDude

0

可以通過調用ElementAt(Int32)或ElementAtOrDefault(Int32)方法按索引選擇堆棧的元素。

作爲一個側面說明,如果你是新來的C#,總是試圖在

1)MSDN 2找到答案)referencesource.microsoft.com

它通常的方式更快,更可靠然後尋找信息上SO =)

相關問題