Rozszerzone wzorce właściwości
Notatka
Ten artykuł jest specyfikacją funkcji. Specyfikacja służy jako dokument projektowy dla funkcji. Zawiera proponowane zmiany specyfikacji wraz z informacjami wymaganymi podczas projektowania i opracowywania funkcji. Te artykuły są publikowane do momentu sfinalizowania proponowanych zmian specyfikacji i włączenia ich do obecnej specyfikacji ECMA.
Mogą wystąpić pewne rozbieżności między specyfikacją funkcji a ukończoną implementacją. Te różnice są uwzględnione w odpowiednich notatkach ze spotkania projektowania języka (LDM) .
Więcej informacji na temat procesu wdrażania specyfikacji funkcji można znaleźć w standardzie języka C# w artykule dotyczącym specyfikacji .
Problem z czempionem: https://github.com/dotnet/csharplang/issues/4394
Streszczenie
Zezwalaj podwzorcom wzorców właściwości na odwoływanie się do zagnieżdżonych elementów składowych, na przykład:
if (e is MethodCallExpression { Method.Name: "MethodName" })
Zamiast:
if (e is MethodCallExpression { Method: { Name: "MethodName" } })
Motywacja
Jeśli chcesz dopasować właściwość podrzędną, zagnieżdżanie innego cyklicznego wzorca powoduje dodanie zbyt dużego szumu, co zaszkodzi czytelności bez rzeczywistej korzyści.
Szczegółowy projekt
Składnia property_pattern jest modyfikowana w następujący sposób:
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
+ ;
Odbiornik dla każdej nazwy odnośnika jest typem poprzedniego elementu członkowskiego T0, począwszy od typu wejściowego property_pattern. Jeśli T jest typem dopuszczalnym wartości null, T0 jest jego typem bazowym, w przeciwnym razie T0 jest równy T.
Na przykład wzorzec formularza { Prop1.Prop2: pattern }
jest dokładnie odpowiednikiem { Prop1: { Prop2: pattern } }
.
Należy pamiętać, że będzie to kontrola wartości null, gdy T jest typem wartości dopuszczającej wartość null lub typem odwołania. To sprawdzanie wartości null oznacza, że dostępne właściwości zagnieżdżone będą właściwościami T0, a nie T.
Powtarzające się ścieżki składowe są dozwolone. Proces dopasowywania wzorców może wykorzystywać wspólne części wzorców.
C# feature specifications