Collection initializer pada bab sebelumnya masih menuntut penulisan new List<string> lengkap dengan tipenya. C# 12 memperkenalkan penulisan yang lebih ringkas lagi: collection expression. Dengan sintaks kurung siku, kita menuliskan isi koleksi persis seperti konsepnya — [a, b, c] — dan compiler menyesuaikan tipe koleksinya dari konteks.

Sintaks Kurung Siku #

Collection expression memerlukan C# 12 atau lebih baru (bawaan .NET 8 ke atas). Karena compiler memilih tipe target dari sisi kiri penugasan, fitur ini disebut juga target-typed: satu sintaks yang sama menghasilkan List, array, atau tipe koleksi lain sesuai deklarasi variabelnya.

csharp
List<string> keranjang = ["Beras", "Minyak goreng", "Telur"];
string[] hariKerja = ["Senin", "Selasa", "Rabu", "Kamis", "Jumat"];

Console.WriteLine($"Keranjang: {keranjang.Count} item");
Console.WriteLine($"Hari kerja pertama: {hariKerja[0]}");

List<int> nomorAntrean = [];
nomorAntrean.Add(101);
nomorAntrean.Add(102);
Console.WriteLine($"Nomor antrean: {string.Join(", ", nomorAntrean)}");

int[] hargaSatuan = [12000, 18000, 25000];
int total = 0;
foreach (int harga in hargaSatuan)
{
    total += harga;
}
Console.WriteLine($"Total harga: {total}");

List<string> keranjangLengkap = ["Laptop", .. keranjang, "Mouse"];
Console.WriteLine($"Gabungan: {string.Join(", ", keranjangLengkap)}");

Output yang Dihasilkan:

text
Keranjang: 3 item
Hari kerja pertama: Senin
Nomor antrean: 101, 102
Total harga: 55000
Gabungan: Laptop, Beras, Minyak goreng, Telur, Mouse

Mari kita telaah baris demi baris:

  1. Baris 1-2: Sintaks yang sama ([ ... ]) membuat List<string> dan string[]; tipe target di kiri menentukan hasilnya.
  2. Baris 7 (List<int> nomorAntrean = [];): Pasangan kurung siku kosong membuat koleksi kosong — penulisan paling singkat untuk instans tanpa isi.
  3. Baris 12-18: Array hargaSatuan diisi tiga harga, lalu loop menjumlahkannya menjadi 55000.
  4. Baris 20 (["Laptop", .. keranjang, "Mouse"]): Notasi .. disebut spread element: seluruh isi keranjang disisipkan di posisi tersebut, sehingga hasilnya Laptop, Beras, Minyak goreng, Telur, Mouse.

Perbandingan dengan Bentuk Sebelumnya #

Tiga bentuk penulisan kini tersedia, dan pengetahuannya saling melengkapi:

BentukContohSejak
Add berulangdaftar.Add("Beras");C# 1.0
Collection initializernew List<string> { "Beras" }C# 3.0
Collection expressionList<string> x = ["Beras"];C# 12

Spread element juga bisa dirantai: [.. a, .. b] menggabungkan dua koleksi sekaligus, dan satu elemen tunggal boleh diselipkan di antaranya seperti pada contoh "Laptop" dan "Mouse". Kombinasi ini menggantikan pola lama yang memerlukan AddRange dan loop tersendiri.