Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Nota
Artikel ini adalah spesifikasi fitur. Spesifikasi berfungsi sebagai dokumen desain untuk fitur tersebut. Ini termasuk perubahan spesifikasi yang diusulkan, bersama dengan informasi yang diperlukan selama desain dan pengembangan fitur. Artikel ini diterbitkan sampai perubahan spesifikasi yang diusulkan diselesaikan dan dimasukkan dalam spesifikasi ECMA saat ini.
Mungkin ada beberapa perbedaan antara spesifikasi fitur dan implementasi yang selesai. Perbedaan tersebut dicatat dalam catatan rapat desain bahasa (LDM) yang relevan .
Anda dapat mempelajari lebih lanjut tentang proses untuk mengadopsi speklet fitur ke dalam standar bahasa C# dalam artikel tentang spesifikasi .
Masalah juara: https://github.com/dotnet/csharplang/issues/4394
Ringkasan
Izinkan pola sub properti untuk merujuk kepada anggota berlapis, misalnya:
if (e is MethodCallExpression { Method.Name: "MethodName" })
Melainkan:
if (e is MethodCallExpression { Method: { Name: "MethodName" } })
Motivasi
Ketika Anda ingin mencocokkan properti anak, memasukkan pola rekursif lain menambahkan terlalu banyak gangguan yang akan mengurangi keterbacaan tanpa memberikan keuntungan nyata.
Desain terperinci
Sintaks property_pattern dimodifikasi sebagai berikut:
property_pattern
: type? property_pattern_clause simple_designation?
;
property_pattern_clause
: '{' (subpattern (',' subpattern)* ','?)? '}'
;
subpattern
- : identifier ':' pattern
+ : subpattern_name ':' pattern
;
+subpattern_name
+ : identifier
+ | subpattern_name '.' identifier
+ ;
Penerima untuk setiap pencarian nama adalah tipe dari anggota sebelumnya T0, dimulai dari tipe input dari pola_properti . jika T adalah tipe nullable, maka T0 adalah tipe dasarnya; jika tidak, T0 sama dengan T.
Misalnya, pola formulir { Prop1.Prop2: pattern }
sama persis dengan { Prop1: { Prop2: pattern } }
.
Perhatikan bahwa ini akan menyertakan pemeriksaan null ketika T adalah tipe nilai nullable atau tipe referensi. Pemeriksaan null ini berarti bahwa properti bertingkat yang tersedia adalah properti dari T0, bukan milik T.
Jalur anggota yang berulang diperbolehkan. Kompilasi pencocokan pola dapat memanfaatkan bagian pola umum.
C# feature specifications