Sdílet prostřednictvím


Vzory rozšířených vlastností

Poznámka

Tento článek je specifikace funkce. Specifikace slouží jako návrhový dokument pro funkci. Zahrnuje navrhované změny specifikace spolu s informacemi potřebnými při návrhu a vývoji funkce. Tyto články se publikují, dokud nebudou navrhované změny specifikace finalizovány a začleněny do aktuální specifikace ECMA.

Mezi specifikací funkce a dokončenou implementací může docházet k nějakým nesrovnalostem. Tyto rozdíly jsou zachyceny v poznámkách ze schůzky návrhu jazyka (LDM) .

Další informace o procesu přijetí specifikací funkcí do jazyka C# najdete v článku o specifikacích .

Problém šampiona: https://github.com/dotnet/csharplang/issues/4394

Shrnutí

Umožněte podvzorům vlastností odkazovat na vnořené členy, například:

if (e is MethodCallExpression { Method.Name: "MethodName" })

Namísto:

if (e is MethodCallExpression { Method: { Name: "MethodName" } })

Motivace

Pokud chcete shodovat podřízenou vlastnost, vnoření jiného rekurzivního vzoru přidá příliš mnoho šumu, což poškodí čitelnost bez skutečné výhody.

Podrobný návrh

Syntaxe property_pattern se upraví následujícím způsobem:

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
+ ;

Příjemce pro každé vyhledávání jmen je typ předchozího členu T0, počínaje vstupní typproperty_pattern. pokud T je typ s možnou hodnotou null, T0 je jeho základní typ, jinak T0 se rovná T.

Například vzor formuláře { Prop1.Prop2: pattern } je přesně ekvivalentní { Prop1: { Prop2: pattern } }.

Všimněte si, že to bude obsahovat kontrolu null, pokud T je typ hodnoty null nebo typ odkazu. Tato kontrola na hodnotu null znamená, že vnořené vlastnosti, které jsou k dispozici, budou vlastnostmi T0, nikoli T.

Jsou povoleny opakované cesty členů. Kompilace porovnávání vzorů může využívat společné části vzorů.