Stackの一部分のみを配列として取得するメソッドは用意されていません。 そのため、全部を配列に変換した後必要な部分だけを抜き出して使うか、次のようにLINQの拡張メソッドSkipおよびTakeを組み合わせて一部分のみを取得します。
LINQの拡張メソッドSkip・Takeを使ってStackの一部分を配列に変換する
using System;
using System.Collections.Generic;
using System.Linq;
class Sample {
static void Main()
{
var s = new Stack<string>();
s.Push("Alice");
s.Push("Bob");
s.Push("Charlie");
s.Push("Dave");
s.Push("Eve");
// Stackの1番目から3つ分を配列に変換
// (Stackから要素1つ分をSkip、そこから要素3つをTake、その結果をToArray)
var arr = s.Skip(1).Take(3).ToArray();
for (var i = 0; i < arr.Length; i++) {
Console.WriteLine("arr[{0}] => {1}", i, arr[i]);
}
}
}
実行結果
arr[0] => Dave arr[1] => Charlie arr[2] => Bob