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

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 .


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.