Saya ingin menggunakan penginisialisasi koleksi untuk bit kode berikutnya:
public Dictionary<int, string> GetNames()
{
Dictionary<int, string> names = new Dictionary<int, string>();
names.Add(1, "Adam");
names.Add(2, "Bart");
names.Add(3, "Charlie");
return names;
}
Jadi biasanya itu harus seperti:
return new Dictionary<int, string>
{
1, "Adam",
2, "Bart"
...
Tapi apa sintaks yang benar untuk ini?
Jawaban:
sumber
Dictionary<TKey, TValue>
subclass atau juga akan bekerjaICollection<KeyValuePair<TKey, TValue>>
?var
sebagai pengganti tipe deklarasi, atau jika meninggalkan tipe deklarasi dapat menghilangkannew Dictio...
- stackoverflow.com/questions/5678216/…var
secara harfiah hanya menghemat penekanan tombol, itu secara implisit diketik dengan kuat .var
dan mengulang diri sendiri denganSomeType obj = new SomeType...
. Dan karena Anda tidak dapat mendeklarasikanvar obj;
tanpa segera melakukan inisialisasi, saya tidak melihat masalahnya. Sungguh, saya mencoba untuk belajar, tetapi saya tidak dapat mengubah posisi Anda.Sintaksnya sedikit berbeda:
Perhatikan bahwa Anda menambahkan tupel nilai secara efektif.
Sebagai catatan samping: penginisialisasi koleksi berisi argumen yang pada dasarnya merupakan argumen untuk fungsi Add () apa pun yang berguna sehubungan dengan jenis argumen waktu kompilasi. Artinya, jika saya punya koleksi:
kode berikut benar-benar legal:
sumber
IEnumerable
dan memilikiAdd()
metode.Add
.IEnumerable<T>
dan yang memilikiAdd
metode. JikaAdd
metode ini membutuhkan 3 parameter, maka Anda memerlukan 3 objek di dalam tanda kurung.sumber
Pertanyaannya diberi tag
c#-3.0
, tetapi untuk kelengkapan saya akan menyebutkan sintaks baru yang tersedia dengan C # 6 jika Anda menggunakan Visual Studio 2015 (atau Mono 4.0):Catatan: sintaks lama yang disebutkan dalam jawaban lain masih berfungsi, jika Anda menyukainya lebih baik. Sekali lagi, untuk kelengkapan, inilah sintaks lama:
Satu hal menarik lainnya untuk diperhatikan adalah dengan sintaks mana pun Anda dapat meninggalkan koma terakhir jika Anda mau, yang membuatnya lebih mudah untuk menyalin / menempel baris tambahan. Misalnya, kompilasi berikut baik-baik saja:
sumber
Jika Anda mencari sintaks yang lebih sedikit verbose, Anda dapat membuat subkelas
Dictionary<string, object>
(atau apa pun tipe Anda) seperti ini:Kemudian lakukan inisialisasi seperti ini
Yang mana setara dengan
Manfaatnya adalah Anda mendapatkan semua hal jenis kompilasi yang mungkin Anda inginkan seperti bisa dikatakan
is DebugKeyValueDict
dari padais IDictionary<string, object>
atau mengubah jenis kunci atau nilai di kemudian hari. Jika Anda melakukan sesuatu seperti ini dalam halaman cshtml pisau cukur, itu jauh lebih bagus untuk dilihat.
Selain tidak terlalu bertele-tele, Anda tentu saja dapat menambahkan metode ekstra ke kelas ini untuk apa pun yang Anda inginkan.
sumber
Dalam contoh kode berikut, a
Dictionary<TKey, TValue>
diinisialisasi dengan contoh tipeStudentName
.dari msdn
sumber
Ya kita bisa menggunakan penginisialisasi koleksi di kamus. Jika kita memiliki kamus seperti ini-
Kami dapat menginisialisasi sebagai berikut.
sumber