Могу ли я использовать инициализаторы коллекций с NameValueCollection?

92

Есть ли способ инициализировать NVC с использованием синтаксиса инициализатора коллекции C #:

NameValueCollection nvc = new NameValueCollection() { ("a", "1"), ("b", "2") };

Благодарность

разрыв
источник

Ответы:

139

Да; просто использует фигурные скобки вместо круглых.

var nvc = new NameValueCollection { {"a", "1"}, {"b", "2"} };

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

SLaks
источник
Спасибо за быстрые ответы!
разрыв
На странице MSDN по инициализации объектов и коллекций точно указано , почему используется NameValueCollectionэтот синтаксис: msdn.microsoft.com/en-us/library/bb384062.aspx
user7116,
3
@six: На самом деле, он даже не упоминает этот синтаксис.
SLaks
4
Хорошая уловка, похоже, что она спрятана на странице для Dictionary<K,V>инициализации »или любой коллекции, метод Add которой принимает несколько параметров,» msdn.microsoft.com/en-us/library/bb531208.aspx
user7116
8

Вы можете использовать инициализаторы коллекции со всем, что имеет Addметод. Да, утка печатает. Если Addу вас более 1 параметра, поместите кортежи в фигурные скобки:

NameValueCollection nvc = new NameValueCollection() { { "a", "1" }, { "b", "2" } };
Андрей
источник
3
Не совсем; это необходимо реализовать IEnumerable.
SLaks
3
Реализует System.Collections.IEnumerableAND имеет Addметод, принимающий по крайней мере 1 аргумент.
user7116
1
@SLaks да, я забыл об этом. Кстати, это довольно странное требование, потому что эта конструкция не использует методы IEnumerable.
Андрей
1
Поскольку базовый класс, NameObjectCollectionBaseкоторый использует IEnumerable. Это урок для меня раньше, если вы хотите проверить, какая реализация использовалась, убедитесь, что вы проверили все базовые типы до System.Object.
CallMeLaNN