¿Puedo usar inicializadores de colección con NameValueCollection?

92

¿Hay alguna manera de inicializar un NVC usando la sintaxis del inicializador de colección C #?

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

Gracias

brecha
fuente

Respuestas:

137

Si; solo usa llaves en lugar de paréntesis.

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

Puede llamar a Addmétodos con conjuntos arbitrarios de parámetros utilizando la sintaxis.

SLaks
fuente
¡Gracias por las respuestas rápidas!
intervalo
La página de MSDN sobre Inicialización de objetos y colecciones describe exactamente por qué NameValueCollectionacepta esta sintaxis: msdn.microsoft.com/en-us/library/bb384062.aspx
user7116
3
@six: En realidad, ni siquiera menciona esta sintaxis.
SLaks
4
Buen truco, parece estar enterrado en la página para la Dictionary<K,V>inicialización, "o cualquier colección cuyo método Add tome múltiples parámetros", msdn.microsoft.com/en-us/library/bb531208.aspx
user7116
8

Puede usar inicializadores de colección con todo lo que tenga Addmétodo. Sí, escribiendo pato. Si Addtiene más de 1 parámetro, ponga tuplas entre llaves:

NameValueCollection nvc = new NameValueCollection() { { "a", "1" }, { "b", "2" } };
Andrey
fuente
3
No exactamente; debe implementar IEnumerable.
SLaks
3
Implementa System.Collections.IEnumerableY tiene un Addmétodo que toma al menos 1 argumento.
user7116
1
@SLaks sí, lo olvidé. Por cierto, es un requisito bastante extraño, porque esta construcción no usa los métodos de IEnumerable.
Andrey
1
Porque la clase base NameObjectCollectionBaseque usa IEnumerable. Es una lección para mí antes, si desea verificar cuál fue la implementación utilizada, asegúrese de verificar todo el tipo base hasta System.Object.
CallMeLaNN