Возможно ли создание экземпляра очереди с использованием {a, b, c} в C #? - PullRequest
5 голосов
/ 26 октября 2010

Возможно ли это сделать в C #?

Queue<string> helperStrings = {"right", "left", "up", "down"};

или для этого нужно сначала создать массив?

Ответы [ 3 ]

16 голосов
/ 26 октября 2010

Нет, вы не можете инициализировать очередь таким образом.

В любом случае, вы можете сделать что-то вроде этого:

var q = new Queue<string>( new[]{ "A", "B", "C" });

, и это, очевидно, означает пропуск через массив.

12 голосов
/ 26 октября 2010

Возможно ли это сделать в C #?

К сожалению, нет.

Правило для инициализаторов коллекций в C # состоит в том, что объект должен (1) реализовывать IEnumerableи (2) имеют метод Add.Инициализатор коллекции

new C(q) { r, s, t }

переписывается как

temp = new C(q);
temp.Add(r);
temp.Add(s);
temp.Add(t);

, а затем приводит к тому, что находится в temp.

Queue<T> реализует IEnumerable, но не имеетДобавить метод;у него есть метод Enqueue.

3 голосов
/ 26 октября 2010

Поскольку Queue<T> не реализует метод 'Добавить', вам необходимо создать экземпляр IEnumerable<string>, из которого он может быть инициализирован:

Queue<string> helperStrings 
    = new Queue<string>(new List<string>() { "right", "left", "up", "down" });
...