Var pattern, ditulis var x, selalu cocok dengan input apa pun dan mengikat input itu ke variabel tanpa mengubah tipe. Pada pandangan pertama pola ini tampak tidak melakukan apa-apa, tetapi justru sifat “selalu cocok” itulah yang berguna: menangkap nilai untuk guard, menampung cabang terakhir dengan nama, dan mengikat posisi di dalam pola lain.

Mekanisme: Selalu Cocok, Mengikat Tanpa Menyalin #

Pola var x mengikat input ke variabel yang bertipe sama dengan tipe statis input, termasuk bila input null. Tidak ada pemeriksaan yang dilakukan, sehingga arm var biasanya diletakkan setelah arm yang lebih spesifik. Perbedaannya dengan discard _ terletak pada pengikatan: var memberi nama yang bisa dipakai, sedangkan discard membuang nilai.

Contoh: Menangkap Nilai Apa Pun #

csharp
object muatan = 250000;

string kategori = muatan switch
{
    string teks => $"Teks: {teks}",
    var nilai => $"Nilai apa pun: {nilai}"
};

Console.WriteLine(kategori);

int total = 640000;

string diskon = total switch
{
    >= 1000000 => "Diskon besar",
    var t when t >= 500000 => "Diskon sedang",
    _ => "Tanpa diskon"
};

Console.WriteLine(diskon);

object memo = "Memo";

string hasil = memo switch
{
    string { Length: > 4 } teks => $"Panjang: {teks.Length}",
    var lainnya => $"Lainnya: {lainnya}"
};

Console.WriteLine(hasil);

Output yang Dihasilkan:

text
Nilai apa pun: 250000
Diskon sedang
Lainnya: Memo

Mari kita bedah baris demi baris:

  1. string teks lalu var nilai: Type pattern di atas menyaring teks; arm var menampung sisanya apa pun tipenya, di sini int yang di-boxing.
  2. var t when t >= 500000: Pola var mengikat nilai ke t, lalu clause when menilai syarat; gabungan ini setara dengan relational pattern tetapi memungkinkan perhitungan bebas di guard.
  3. >= 1000000 di atas var t when ...: Arm spesifik lebih dulu dievaluasi, sehingga guard hanya diperiksa untuk nilai yang belum terlayani.
  4. string { Length: > 4 } teks: Kombinasi type dan property pattern menolak "Memo" karena panjangnya tepat empat.
  5. var lainnya => $"Lainnya: {lainnya}": Cabang penangkap memberi nama pada nilai yang gagal memenuhi pola-pola di atas, sehingga pesan akhir tetap informatif.

Var Pattern di Dalam Pola Lain #

Pada bab Positional Pattern dan List Pattern, var mengikat posisi tertentu, misalnya (var x, var y) dan [var awal, .., var akhir]. Di posisi itu var tidak berperan sebagai cabang penangkap, melainkan sebagai pengikat sebagian data sementara posisi lain diuji pola spesifik.