List pattern memeriksa isi kumpulan data elemen demi elemen: [3, 7, 11] berarti kumpulan dengan tiga elemen bernilai itu berurutan. Fitur ini diperkenalkan C# 11 dan bekerja pada tipe yang punya penghitung elemen serta pengindeks, seperti array, List<T>, dan string. Bab ini membahas elemen pola, slice pattern, dan contoh penggunaannya.

Elemen Pola dan Slice #

Di dalam kurung siku, setiap posisi memakai pola yang sudah kita kenal: constant, relational, type, atau var. Tanda .. adalah slice pattern yang cocok dengan nol atau lebih elemen apa pun, sehingga [var awal, .., var akhir] menangkap ujung-ujung kumpulan tanpa peduli panjangnya. Pola [] khusus mencocokkan kumpulan kosong.

Contoh: Kombinasi, Kode, dan Rentetan #

csharp
int[] kombinasi = { 3, 7, 11 };

string hasil = kombinasi switch
{
    [3, 7, 11] => "Kombinasi standar",
    [var awal, .., var akhir] => $"Ujung {awal} dan {akhir}",
    _ => "Format tidak dikenal"
};

Console.WriteLine(hasil);

int[] dataPendek = { 9 };

string deskripsi = dataPendek switch
{
    [var tunggal] => $"Satu elemen: {tunggal}",
    [] => "Array kosong",
    _ => "Lebih dari satu elemen"
};

Console.WriteLine(deskripsi);

if (kombinasi is [_, 7, _])
{
    Console.WriteLine("Elemen kedua bernilai 7");
}

if (kombinasi is [.., >= 10])
{
    Console.WriteLine("Elemen terakhir minimal 10");
}

if ("BUDI-21" is ['B', .., '1'])
{
    Console.WriteLine("Kode diawali B dan diakhiri 1");
}

Output yang Dihasilkan:

text
Kombinasi standar
Satu elemen: 9
Elemen kedua bernilai 7
Elemen terakhir minimal 10
Kode diawali B dan diakhiri 1

Mari kita bedah baris demi baris:

  1. [3, 7, 11]: Tiga constant pattern diuji berurutan terhadap elemen indeks 0 sampai 2; array contoh cocok penuh di arm pertama.
  2. [var awal, .., var akhir]: Slice pattern menengah menampung sisa elemen tanpa mengikatnya, sementara var menangkap elemen pertama dan terakhir.
  3. [var tunggal] dan []: Urutan arm pada dataPendek menunjukkan pencocokan panjang: satu elemen ditangkap arm pertama, dan kumpulan kosong jatuh ke pola [].
  4. [_, 7, _]: Pola panjang tetap tiga dengan posisi tengah berupa constant; arm ini menuntut panjang tepat tiga sekaligus nilai tengah 7.
  5. [.., >= 10]: Slice di awal menampung semua elemen kecuali yang terakhir, dan posisi terakhir diuji relational pattern.
  6. "BUDI-21" is ['B', .., '1']: String ikut dicocokkan per karakter, sehingga aturan awalan dan akhiran kode terbaca sebagai satu pola.

Syarat Tipe yang Didukung #

List pattern menuntut tipe dengan properti Count atau Length dan indexer yang bisa dibaca. Array, List<T>, Span<T>, dan string memenuhi syarat itu. Kumpulan yang hanya bisa diiterasi, seperti IEnumerable<T> polos, tidak didukung karena pola perlu akses posisi langsung.