Инициализация очереди или стека со значениями по умолчанию?

вы можете инициализировать список с предварительно установленных значений:

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

есть ли эквивалент выше для очереди? Моей идеей было:--4-->

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

не работает. Есть ли обходной путь?

Is

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

единственное разумное решение?

3 ответов


конструктор 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);

см.:http://blogs.msdn.com/b/madst/archive/2006/10/10/what-is-a-collection_3f00_.aspx и особенно:

значение этого нового синтаксиса-просто создать экземпляр MyNames, используя его конструктор no-arg (аргументы конструктора могут быть при необходимости) и вызовите его метод Add с каждым из веревка.

и

результирующий дизайн языка-это подход, основанный на шаблоне. Мы полагаемся о пользователях, использующих определенное имя для своих методов таким образом, что не проверено компилятором, когда они его пишут. Если они пойдут и изменятся ... имя Add to AddPair в одной сборке компилятор не будет пожаловаться на это, но вместо этого об инициализаторе коллекции сидя где-то в другом месте, вдруг не хватает перегрузки, чтобы позвонить.

очередь не поддерживает метод Add и, следовательно, не может быть инициализирована синтаксисом стиля короткого выражения. Это действительно выбор по дизайну. К счастью, вы можете передать коллекцию конструктору очереди.


попробуй такое

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