Dapatkah saya menggunakan penginisialisasi koleksi dengan NameValueCollection?

92

Apakah ada cara untuk menginisialisasi NVC menggunakan sintaks penginisialisasi C # collection:

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

Terima kasih

celah
sumber

Jawaban:

139

Iya; hanya menggunakan tanda kurung bukan tanda kurung.

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

Anda dapat memanggil Addmetode dengan kumpulan parameter arbitrer menggunakan sintaks.

SLaks
sumber
Terima kasih atas balasan cepatnya!
gap
Halaman MSDN pada Objek dan Inisialisasi Koleksi menguraikan dengan tepat mengapa NameValueCollectionmenerima sintaks ini: msdn.microsoft.com/en-us/library/bb384062.aspx
user7116
3
@six: Sebenarnya, sintaks ini bahkan tidak disebutkan.
SLaks
4
Tangkapan bagus, tampaknya terkubur di halaman untuk Dictionary<K,V>inisialisasi, "atau koleksi apa pun yang metode Tambahkannya mengambil beberapa parameter," msdn.microsoft.com/en-us/library/bb531208.aspx
user7116
8

Anda dapat menggunakan penginisialisasi koleksi dengan semua yang memiliki Addmetode. Ya, bebek mengetik. Jika Addmemiliki lebih dari 1 param, taruh tupel dalam tanda kurung kurawal:

NameValueCollection nvc = new NameValueCollection() { { "a", "1" }, { "b", "2" } };
Andrey
sumber
3
Tidak terlalu; itu harus diimplementasikan IEnumerable.
SLaks
3
Implements System.Collections.IEnumerableAND memiliki Addmetode yang mengambil setidaknya 1 argumen.
pengguna7116
1
@SLaks ya, saya lupa tentang itu. Btw itu persyaratan yang agak aneh, karena konstruksi ini tidak menggunakan metode IEnumerable.
Andrey
1
Karena kelas basis NameObjectCollectionBaseyang menggunakan IEnumerable. Ini adalah pelajaran bagi saya sebelumnya jika Anda ingin memeriksa implementasi apa yang digunakan pastikan Anda memeriksa semua jenis dasar hingga System.Object.
CallMeLaNN