Megosztás a következőn keresztül:


Kiterjesztett tulajdonságminták

Jegyzet

Ez a cikk egy funkcióspecifikáció. A specifikáció a funkció tervezési dokumentumaként szolgál. Tartalmazza a specifikáció javasolt módosításait, valamint a funkció tervezése és fejlesztése során szükséges információkat. Ezeket a cikkeket mindaddig közzéteszik, amíg a javasolt specifikációmódosításokat nem véglegesítik, és be nem építik a jelenlegi ECMA-specifikációba.

A szolgáltatás specifikációja és a befejezett implementáció között eltérések lehetnek. Ezeket a különbségeket a vonatkozó nyelvi tervezési értekezlet (LDM) megjegyzései rögzítik.

A funkcióspektusok C# nyelvi szabványba való bevezetésének folyamatáról a specifikációkcímű cikkben olvashat bővebben.

Bajnoki probléma: https://github.com/dotnet/csharplang/issues/4394

Összefoglalás

Engedjük meg a tulajdonság al-mintázatainak, hogy beágyazott tagokra hivatkozhassanak, például:

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

Ahelyett, hogy:

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

Motiváció

Ha össze szeretné kapcsolni a gyermek tulajdonságával, egy másik rekurzív minta beágyazása túl sok zajt kelt, ami ronthatja az olvashatóságot anélkül, hogy valós előnyt nyújtana.

Részletes kialakítás

A property_pattern szintaxis a következőképpen módosul:

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

Az egyes névkeresések fogadója az előző tag T0típusa, indulva a property_patternbemeneti típusából. Ha a T null értékű típus, akkor a T0 annak alapul szolgáló típusa, ellenkező esetben a T0 egyenlő a Ttípussal.

Például a { Prop1.Prop2: pattern } mintázat pontosan olyan, mint a { Prop1: { Prop2: pattern } }.

Vegye figyelembe, hogy ez magában foglalja a null ellenőrzést, ha T null értékű érték vagy hivatkozástípus. Ez a null ellenőrzés azt jelenti, hogy az elérhető beágyazott tulajdonságok T0tulajdonságai lesznek, nem pedig T.

A tagok ismétlődő elérési útjai engedélyezettek. A mintaegyezés összeállítása kihasználhatja a minták gyakori részeit.