Udostępnij za pośrednictwem


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.