Bab Collection Expression di section Koleksi Dasar memperkenalkan sintaks kurung siku [ ... ] untuk List dan array. Bab ini menambah tiga kemampuan lanjutan yang menjadikannya alat serbaguna: collection expression sebagai argumen method yang menuntut ReadOnlySpan, penyebaran dua sumber sekaligus lewat spread, dan bentuk bersarang untuk jagged array. Sama seperti sebelumnya, tipe target di sisi kiri yang menentukan bentuk akhirnya.
Tipe Target yang Beragam #
Collection expression dapat dituju oleh array, Span<T> dan ReadOnlySpan<T>, interface koleksi seperti IEnumerable<T>, serta tipe koleksi yang punya pola pembangun yang cocok. Compiler menyalin isi ke struktur yang diminta tanpa menuntut penulisan new berulang.
Contoh: Argumen, Spread, dan Sarang #
static int Jumlah(ReadOnlySpan<int> angka)
{
int total = 0;
foreach (int n in angka)
{
total += n;
}
return total;
}
Console.WriteLine(Jumlah([3, 5, 8]));
IEnumerable<string> kota = ["Bandung", "Surabaya", "Medan"];
Console.WriteLine(string.Join(" | ", kota));
int[] ganjil = [1, 3, 5];
int[] genap = [2, 4, 6];
int[] gabungan = [0, .. ganjil, .. genap, 7];
Console.WriteLine(string.Join(", ", gabungan));
int[][] papan = [[1, 2], [3, 4], [5, 6]];
Console.WriteLine($"{papan.Length} baris, {papan[1].Length} kolom");
List<int> hasil = [];
foreach (int n in gabungan)
{
if (n % 2 == 0) hasil.Add(n);
}
Console.WriteLine(string.Join(", ", hasil));Output yang Dihasilkan:
16
Bandung | Surabaya | Medan
0, 1, 3, 5, 2, 4, 6, 7
3 baris, 2 kolom
0, 2, 4, 6Mari kita bedah baris demi baris:
Jumlah([3, 5, 8]): parameter method bertipeReadOnlySpan<int>; collection expression langsung menjadi jendela baca di atas elemen tanpa membentuk array.IEnumerable<string> kota = [...]: target interface membuatList<string>di balik layar; iterasi danstring.Joinbekerja seperti biasa.gabungan: dua spread..menyisipkan isiganjildangenapdi antara elemen0dan7dalam satu expression.papan: collection expression bersarang membentuk jagged array; setiap baris dalam adalah collection expression tersendiri.hasil: penampung kosong[]diisi manual untuk menyaring angka genap, membuktikan expression kosong sah untuk targetList<int>.
Kapan Mengungguli Bentuk Lama #
Collection initializer tetap sah, tetapi collection expression menghapus pengulangan nama tipe dan bekerja pada target yang initializer tidak dukung, seperti ReadOnlySpan<T> dan jagged array dengan sintaks bersih. Kombinasi spread juga menggantikan pola AddRange dan loop penyusunan.