ฉันสามารถใช้ collection initializers กับ NameValueCollection ได้หรือไม่


92

มีวิธีเริ่มต้น NVC โดยใช้ไวยากรณ์ C # collection initializer หรือไม่:

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

ขอบคุณ

คำตอบ:


139

ใช่; เพียงแค่ใช้เครื่องหมายวงเล็บแทนวงเล็บ

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

คุณสามารถเรียกใช้Addเมธอดด้วยชุดพารามิเตอร์โดยพลการโดยใช้ไวยากรณ์


ขอบคุณสำหรับการตอบกลับด่วน!
gap

หน้า MSDN บนObject และ Collection Initializationสรุปเหตุผลที่NameValueCollectionยอมรับไวยากรณ์นี้: msdn.microsoft.com/en-us/library/bb384062.aspx
user7116

3
@six: อันที่จริงมันไม่ได้พูดถึงไวยากรณ์นี้ด้วยซ้ำ
SLaks

4
จับได้ดีดูเหมือนว่าจะถูกฝังไว้ในหน้าสำหรับการDictionary<K,V>เริ่มต้น "หรือคอลเล็กชันใด ๆ ที่วิธีการเพิ่มใช้พารามิเตอร์หลายตัว" msdn.microsoft.com/en-us/library/bb531208.aspx
user7116

8

คุณสามารถใช้ collection initializers กับทุกสิ่งที่มีAddวิธีการ ใช่เป็ดพิมพ์ หากAddมีมากกว่า 1 พารามิเตอร์ให้ใส่ทูเปิลในวงเล็บปีกกา:

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

3
ไม่ค่อย; IEnumerableก็จะต้องดำเนินการ
SLaks

3
Implements System.Collections.IEnumerableAND มีAddวิธีการรับอาร์กิวเมนต์อย่างน้อย 1 รายการ
user7116

1
@SLaks ใช่ฉันลืมไปแล้ว แต่มันเป็นข้อกำหนดที่ค่อนข้างแปลกเพราะโครงสร้างนี้ไม่ได้ใช้วิธีการของ IEnumerable
Andrey

1
เพราะคลาสพื้นฐานNameObjectCollectionBaseที่ใช้IEnumerable. เป็นบทเรียนสำหรับฉันก่อนหน้านี้หากคุณต้องการตรวจสอบว่าการนำไปใช้คืออะไรตรวจสอบให้แน่ใจว่าคุณได้ตรวจสอบประเภทพื้นฐานทั้งหมดSystem.Objectแล้ว
CallMeLaNN
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.