Kann ich Sammlungsinitialisierer mit einer NameValueCollection verwenden?

91

Gibt es eine Möglichkeit, einen NVC mithilfe der C # -Sammlungsinitialisierersyntax zu initialisieren:

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

Vielen Dank

Spalt
quelle

Antworten:

137

Ja; verwendet nur geschweifte Klammern anstelle von Klammern.

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

AddMit der Syntax können Sie Methoden mit beliebigen Parametersätzen aufrufen .

SLaks
quelle
Danke für die schnellen Antworten!
Lücke
Die MSDN-Seite zur Objekt- und Sammlungsinitialisierung beschreibt genau, warum NameValueCollectiondiese Syntax akzeptiert wird: msdn.microsoft.com/en-us/library/bb384062.aspx
user7116
3
@six: Eigentlich wird diese Syntax nicht einmal erwähnt.
SLaks
4
Guter Fang, es scheint auf der Seite für die Dictionary<K,V>Initialisierung vergraben zu sein , "oder jede Sammlung, deren Add-Methode mehrere Parameter akzeptiert
user7116
8

Sie können Sammlungsinitialisierer für alle AddMethoden verwenden. Ja, Ententippen. Wenn Addmehr als 1 Parameter Tupel in geschweiften Klammern hat:

NameValueCollection nvc = new NameValueCollection() { { "a", "1" }, { "b", "2" } };
Andrey
quelle
3
Nicht ganz; es muss implementieren IEnumerable.
SLaks
3
Implementiert System.Collections.IEnumerableAND hat eine AddMethode, die mindestens 1 Argument akzeptiert.
user7116
1
@Slaks ja, ich habe es vergessen. Übrigens ist es eine ziemlich seltsame Anforderung, da diese Konstruktion nicht die Methoden von IEnumerable verwendet.
Andrey
1
Weil die Basisklasse NameObjectCollectionBase, die verwendet IEnumerable. Es ist eine Lektion für mich, wenn Sie überprüfen möchten, welche Implementierung verwendet wurde, stellen Sie sicher, dass Sie alle Basistypen bis zu überprüfen System.Object.
CallMeLaNN