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

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.


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" } };

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.