Puis-je utiliser des initialiseurs de collection avec un NameValueCollection?

92

Existe-t-il un moyen d'initialiser un NVC à l'aide de la syntaxe d'initialisation de collection C #:

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

Merci

écart
la source

Réponses:

137

Oui; utilise simplement des accolades au lieu de parenthèses.

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

Vous pouvez appeler des Addméthodes avec des ensembles arbitraires de paramètres à l'aide de la syntaxe.

SLaks
la source
Merci pour les réponses rapides!
écart le
La page MSDN sur l' initialisation des objets et des collections explique exactement pourquoi NameValueCollectionaccepte cette syntaxe: msdn.microsoft.com/en-us/library/bb384062.aspx
user7116
3
@six: En fait, il ne mentionne même pas cette syntaxe.
SLaks
4
Bonne prise, il semble être enterré dans la page d' Dictionary<K,V>initialisation, "ou toute collection dont la méthode Add prend plusieurs paramètres", msdn.microsoft.com/en-us/library/bb531208.aspx
user7116
8

Vous pouvez utiliser des initialiseurs de collection avec tout ce qui a Add méthode. Ouais, frappe de canard. Si Adda plus de 1 paramètre, placez les tuples entre accolades:

NameValueCollection nvc = new NameValueCollection() { { "a", "1" }, { "b", "2" } };
Andrey
la source
3
Pas assez; il doit mettre en œuvre IEnumerable.
SLaks
3
Implements System.Collections.IEnumerableAND a une Addméthode prenant au moins 1 argument.
user7116
1
@SLaks oui, je l'ai oublié. Btw c'est une exigence plutôt étrange, car cette construction n'utilise pas les méthodes de IEnumerable.
Andrey
1
Parce que la classe de base NameObjectCollectionBasequi utilise IEnumerable. C'est une leçon pour moi avant si vous voulez vérifier quelle a été l'implémentation utilisée, assurez-vous de vérifier tout le type de base jusqu'à System.Object.
CallMeLaNN