15

事前に配置された値でリストを初期化できます。

List<int> L1 = new List<int> {1, 2, 3};

上記のキューに相当するものはありますか? 私の考えは:

Queue<int> Q1 = new Queue<int> {1, 2, 3};

これは機能しません。回避策はありますか?

Queue<int> Q1 = new Queue<int>();
Q1.Enqueue(1);
Q1.Enqueue(2);
Q1.Enqueue(3);

唯一の有効な解決策は?

4

3 に答える 3

27

コンストラクターを使用しますQueue<T> Constructor (IEnumerable<T>)

Queue<int> Q1 = new Queue<int>(new[] { 1, 2, 3 });

または

List<int> list = new List<int>{1, 2, 3 };
Queue<int> Q1 = new Queue<int>(list);
于 2013-01-01T06:22:57.463 に答える
4

参照: http://blogs.msdn.com/b/madst/archive/2006/10/10/what-is-a-collection_3f00_.aspx特に:

この新しい構文の意味は、引数のないコンストラクター (必要に応じてコンストラクター引数を指定できます) を使用して MyNames のインスタンスを作成し、各文字列で Add メソッドを呼び出すことです。

結果として得られる言語設計は、「パターンベース」のアプローチです。私たちは、メソッドを書くときにコンパイラによってチェックされない方法で、ユーザーがメソッドに特定の名前を使用することに依存しています。1 つのアセンブリで Add の名前を AddPair に変更した場合、コンパイラはそれについて文句を言うのではなく、別の場所にあるコレクション初期化子が呼び出すオーバーロードを突然失ったことについて文句を言いません。

キューは Add メソッドをサポートしていないため、短い式スタイルの構文で初期化することはできません。これは本当に設計による選択です。幸いなことに、コレクションを Queue のコンストラクターに渡すことができます。

于 2013-01-01T06:29:37.863 に答える
1

これを試して

Queue<int> Q1 = new Queue<int>(new int[] { 1, 2, 3} );
于 2013-01-01T06:25:54.323 に答える