Delen via


Uitgebreide eigenschapspatronen

Notitie

Dit artikel is een functiespecificatie. De specificatie fungeert als het ontwerpdocument voor de functie. Het bevat voorgestelde specificatiewijzigingen, samen met informatie die nodig is tijdens het ontwerp en de ontwikkeling van de functie. Deze artikelen worden gepubliceerd totdat de voorgestelde specificaties zijn voltooid en opgenomen in de huidige ECMA-specificatie.

Er kunnen enkele verschillen zijn tussen de functiespecificatie en de voltooide implementatie. Deze verschillen worden vastgelegd in de relevante notities van de Language Design Meeting (LDM) .

Meer informatie over het proces voor het aannemen van functiespeclets in de C#-taalstandaard vindt u in het artikel over de specificaties.

Probleem met kampioen: https://github.com/dotnet/csharplang/issues/4394

Samenvatting

Toestaan dat subpatronen van eigenschappen verwijzen naar geneste leden, bijvoorbeeld:

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

In plaats van:

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

Motivatie

Wanneer u een onderliggende eigenschap wilt koppelen, voegt het nesten van een ander recursief patroon te veel ruis toe waardoor leesbaarheid zonder echt voordeel wordt gekwetst.

Gedetailleerd ontwerp

De syntaxis van de property_pattern wordt als volgt gewijzigd:

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

De ontvanger voor elke naamzoekactie is het type van het vorige lid T0, te beginnen bij het invoertype van het property_pattern. als T een null-type is, is T0 het onderliggende type, anders is T0 gelijk aan T-.

Een patroon van het formulier { Prop1.Prop2: pattern } is bijvoorbeeld precies gelijk aan { Prop1: { Prop2: pattern } }.

Houd er rekening mee dat dit de null-controle omvat wanneer T een nullable waardetype of een verwijzingstype is. Deze null-controle betekent dat de geneste eigenschappen die beschikbaar zijn, de eigenschappen van T0-zijn, niet van T.

Herhaalde lidpaden zijn toegestaan. De compilatie van patroonherkenning kan profiteren van veelvoorkomende delen van patronen.