Pada bab-bab sebelumnya, kita selalu mengisi koleksi dengan pemanggilan Add satu per satu setelah deklarasi. Cara ini sah, tetapi menambah baris demi baris kode yang polanya berulang. Collection initializer memungkinkan kita menuliskan isi awal koleksi langsung di dalam deklarasinya, sehingga data awal terlihat utuh dalam satu pandangan.
Initializer pada List #
List<string> daftarTugas = new List<string>();
daftarTugas.Add("Belanja mingguan");
daftarTugas.Add("Cuci mobil");
daftarTugas.Add("Bayar tagihan");
List<string> daftarTugasRingkas = new List<string>
{
"Belanja mingguan",
"Cuci mobil",
"Bayar tagihan"
};
Console.WriteLine($"Jumlah tugas: {daftarTugasRingkas.Count}");
Console.WriteLine($"Tugas kedua: {daftarTugasRingkas[1]}");Output yang Dihasilkan:
Jumlah tugas: 3
Tugas kedua: Cuci mobilMari kita telaah bagian kuncinya:
- Baris 1-5 (bentuk panjang): Koleksi dideklarasikan kosong, lalu diisi lewat tiga pemanggilan
Addyang berulang. - Baris 7-12 (bentuk initializer): Compiler menerjemahkan setiap elemen di dalam kurung kurawal menjadi pemanggilan
Addsecara diam-diam; hasil akhir kedua List tersebut identik. - Baris 14-15:
Countmelaporkan 3 dandaftarTugasRingkas[1]berisi"Cuci mobil"— indeks tetap berlaku seperti List biasa.
Initializer pada Dictionary #
Dictionary juga mendukung initializer, dan menyediakan dua penulisan: pasangan { kunci, nilai } atau sintaks indexer.
Dictionary<string, int> hargaMenu = new Dictionary<string, int>
{
{ "Es teh", 8000 },
{ "Nasi goreng", 25000 },
{ "Ayam bakar", 32000 }
};
Console.WriteLine($"Harga nasi goreng: Rp{hargaMenu["Nasi goreng"]}");Output yang Dihasilkan:
Harga nasi goreng: Rp25000Setiap baris { "Es teh", 8000 } diterjemahkan compiler menjadi pemanggilan Add("Es teh", 8000). Bentuk kedua menuliskannya sebagai ["Es teh"] = 8000 dan diterjemahkan menjadi penugasan indexer. Keduanya menghasilkan Dictionary yang sama; pilih salah satu gaya dan gunakan secara konsisten di seluruh project.
Dua hal perlu diingat saat memakai initializer pada Dictionary. Pertama, aturan kunci unik tetap berlaku: dua baris dengan kunci sama di dalam satu initializer menyebabkan ArgumentException saat program berjalan, karena compiler tetap menerjemahkannya menjadi dua pemanggilan Add. Kedua, initializer juga berlaku untuk koleksi bersarang — daftar di dalam daftar — dan setiap tingkatnya ditulis dengan kurung kurawal masing-masing:
var daftarMenuWarung = new Dictionary<string, List<string>>
{
{ "Minuman", new List<string> { "Es teh", "Jeruk panas" } },
{ "Makanan", new List<string> { "Nasi goreng", "Mie rebus" } }
};Kata kunci var di sini menyuruh compiler menebak tipe dari sisi kanan, sehingga penulisan tipenya tidak berulang — konsep var sudah dibahas pada section Variabel dan Tipe Data.