Property pattern menguji bentuk object melalui property-nya: { Total: >= 500000 } berarti object dengan property Total minimal lima ratus ribu. Pola ini menjadi pilihan alami ketika keputusan bergantung pada isi data, bukan pada tipe object-nya. Bab ini membahas bentuk dasar, extended property pattern dari C# 10, dan sarang pola di dalam pola.

Bentuk Dasar dan Extended #

Bentuk dasar { Properti: pola } memeriksa satu atau beberapa property yang dipisah koma; gabungan koma berarti semua syarat harus terpenuhi. Sejak C# 10, bentuk extended memakai titik untuk menjangkau property bertingkat, misalnya { Pembeli.Kota: "Bandung" }, tanpa perlu menulis pola bersarang berlapis kurung kurawal.

Contoh: Evaluasi Promo Pesanan #

csharp
public record Pelanggan(string Nama, string Kota, int Poin);
public record Pesanan(string Nomor, int Total, Pelanggan Pembeli);

Pesanan pesanan = new Pesanan("ORD-5001", 450000, new Pelanggan("Budi Santoso", "Bandung", 850));

string promo = pesanan switch
{
    { Total: >= 500000 } => "Gratis ongkir",
    { Total: >= 250000, Pembeli.Poin: >= 500 } => "Voucher 25 ribu",
    { Pembeli.Kota: "Bandung" } => "Kode khusus Bandung",
    _ => "Tanpa promo"
};

Console.WriteLine(promo);

if (pesanan is { Pembeli.Kota: "Bandung", Total: > 100000 })
{
    Console.WriteLine("Pesanan Bandung bernilai besar");
}

Output yang Dihasilkan:

text
Voucher 25 ribu
Pesanan Bandung bernilai besar

Mari kita bedah baris demi baris:

  1. { Total: >= 500000 }: Property pattern membungkus relational pattern; arm ini menangkap pesanan besar apa pun tanpa memandang pembelinya.
  2. { Total: >= 250000, Pembeli.Poin: >= 500 }: Dua syarat dipisah koma harus terpenuhi bersama; pesanan contoh bernilai 450000 dengan poin 850 lolos di arm ini.
  3. { Pembeli.Kota: "Bandung" }: Extended property pattern menjangkau property Kota milik Pembeli dalam satu tingkat penulisan.
  4. _ => "Tanpa promo": Arm discard menampung pesanan yang tidak memenuhi aturan mana pun.
  5. pesanan is { Pembeli.Kota: "Bandung", Total: > 100000 }: Pola yang sama bekerja pada operator is, menggantikan dua pemeriksaan bertingkat dalam satu expression.

Pola Bersarang di Dalam Pola #

Sebelum C# 10, syarat bertingkat ditulis dengan pola bersarang seperti { Pembeli: { Kota: "Bandung" } }; bentuk itu masih sah dan wajib dipakai ketika kita juga ingin mengikat Pembeli ke variabel. Di dalam pola, setiap nilai property diuji dengan pola mana pun: constant, relational, bahkan property pattern lagi.