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 #

csharp
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:

text
Jumlah tugas: 3
Tugas kedua: Cuci mobil

Mari kita telaah bagian kuncinya:

  1. Baris 1-5 (bentuk panjang): Koleksi dideklarasikan kosong, lalu diisi lewat tiga pemanggilan Add yang berulang.
  2. Baris 7-12 (bentuk initializer): Compiler menerjemahkan setiap elemen di dalam kurung kurawal menjadi pemanggilan Add secara diam-diam; hasil akhir kedua List tersebut identik.
  3. Baris 14-15: Count melaporkan 3 dan daftarTugasRingkas[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.

csharp
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:

text
Harga nasi goreng: Rp25000

Setiap 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:

csharp
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.