Posso usar inicializadores de coleção com um NameValueCollection?

92

Existe uma maneira de inicializar um NVC usando a sintaxe do inicializador de coleção C #:

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

obrigado

Gap = Vão
fonte

Respostas:

137

Sim; apenas usa colchetes em vez de parênteses.

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

Você pode chamar Addmétodos com conjuntos arbitrários de parâmetros usando a sintaxe.

SLaks
fonte
Obrigado pelas respostas rápidas!
intervalo de
A página do MSDN sobre inicialização de objeto e coleção descreve exatamente por que NameValueCollectionaceita esta sintaxe: msdn.microsoft.com/en-us/library/bb384062.aspx
user7116
3
@six: Na verdade, nem mesmo menciona essa sintaxe.
SLaks
4
Boa captura, parece estar enterrado na página de Dictionary<K,V>inicialização, "ou qualquer coleção cujo método Add leva vários parâmetros," msdn.microsoft.com/en-us/library/bb531208.aspx
user7116
8

Você pode usar inicializadores de coleção com tudo que tem Addmétodo. Sim, pato digitando. Se Addtiver mais de 1 parâmetro, coloque as tuplas entre chaves:

NameValueCollection nvc = new NameValueCollection() { { "a", "1" }, { "b", "2" } };
Andrey
fonte
3
Não exatamente; ele deve implementar IEnumerable.
SLaks
3
Implementa System.Collections.IEnumerableE tem um Addmétodo que usa pelo menos 1 argumento.
user7116
1
@SLaks sim, esqueci. A propósito, é um requisito bastante estranho, porque esta construção não usa os métodos de IEnumerable.
Andrey
1
Porque a classe base NameObjectCollectionBaseque usa IEnumerable. É uma lição para mim antes, se você quiser verificar qual foi a implementação usada, certifique-se de verificar todo o tipo de base até System.Object.
CallMeLaNN