Czy mogę używać inicjatorów kolekcji z NameValueCollection?

92

Czy istnieje sposób na zainicjowanie NVC przy użyciu składni inicjatora kolekcji C #:

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

Dzięki

luka
źródło

Odpowiedzi:

139

Tak; po prostu używa nawiasów klamrowych zamiast nawiasów.

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

Możesz wywołać Addmetody z dowolnymi zestawami parametrów, używając składni.

SLaks
źródło
Dzięki za szybkie odpowiedzi!
przerwa
Strona MSDN dotycząca inicjalizacji obiektu i kolekcji wyjaśnia dokładnie, dlaczego NameValueCollectionakceptuje następującą składnię: msdn.microsoft.com/en-us/library/bb384062.aspx
user7116,
3
@six: Właściwie to nawet nie wspomina o tej składni.
SLaks
4
Dobry chwyt, wygląda na to, że jest zakopany na stronie w celu Dictionary<K,V>zainicjowania ”lub dowolnej kolekcji, której metoda Add przyjmuje wiele parametrów,„ msdn.microsoft.com/en-us/library/bb531208.aspx
user7116,
8

Możesz użyć inicjatorów kolekcji ze wszystkim, co ma Addmetodę. Tak, piszę kaczkę. Jeśli Addma więcej niż 1 parametr, umieść krotki w kręconych bransoletkach:

NameValueCollection nvc = new NameValueCollection() { { "a", "1" }, { "b", "2" } };
Andrey
źródło
3
Nie do końca; musi wdrożyć IEnumerable.
SLaks
3
Implementuje System.Collections.IEnumerableAND ma Addmetodę przyjmującą co najmniej 1 argument.
user7116
1
@SLaks tak, zapomniałem o tym. Przy okazji jest to raczej dziwne wymaganie, ponieważ ta konstrukcja nie wykorzystuje metod IEnumerable.
Andrey,
1
Ponieważ klasa bazowa, NameObjectCollectionBasektóra używa IEnumerable. Jest to dla mnie lekcja wcześniej, jeśli chcesz sprawdzić, do jakiej implementacji zastosowano, sprawdź wszystkie typy bazowe do System.Object.
CallMeLaNN