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 #
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:
Voucher 25 ribu
Pesanan Bandung bernilai besarMari kita bedah baris demi baris:
{ Total: >= 500000 }: Property pattern membungkus relational pattern; arm ini menangkap pesanan besar apa pun tanpa memandang pembelinya.{ Total: >= 250000, Pembeli.Poin: >= 500 }: Dua syarat dipisah koma harus terpenuhi bersama; pesanan contoh bernilai450000dengan poin850lolos di arm ini.{ Pembeli.Kota: "Bandung" }: Extended property pattern menjangkau propertyKotamilikPembelidalam satu tingkat penulisan._ => "Tanpa promo": Arm discard menampung pesanan yang tidak memenuhi aturan mana pun.pesanan is { Pembeli.Kota: "Bandung", Total: > 100000 }: Pola yang sama bekerja pada operatoris, 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.