Как указать буквальный инициализатор для стека или очереди? - PullRequest
7 голосов
/ 27 сентября 2011

Это:

List<string> set = new List<string>() { "a","b" };

отлично работает, но:

Stack<string> set = new Stack<string>() { "a","b" };
Queue<string> set = new Queue<string>() { "a","b" };

терпит неудачу с:

...does not contain a definition for 'Add'

, что заставляет меня задуматься, почему компилятор был настолько глуп, чтобы попросить добавить.

Итак, как должен один инициализировать в конструкторе очереди / стека?

1 Ответ

11 голосов
/ 27 сентября 2011

Инициализаторы коллекции - это функция компилятора, которая вызывает метод Add для каждого передаваемого элемента. Если нет Add метода, вы не сможете его использовать.

Вместо этого вы можете вызвать конструктор Stack или Queue, который принимает IEnumerable<T>:

var stack = new Stack<int>(new [] { 1, 2, 3 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...