¿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

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.


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.