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


92

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

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

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

Ответы:


139

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

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

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


Спасибо за быстрые ответы!
— разрыв

На странице 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.