확장 속성 패턴
메모
이 문서는 기능 사양입니다. 사양은 기능의 디자인 문서 역할을 합니다. 여기에는 기능 디자인 및 개발 중에 필요한 정보와 함께 제안된 사양 변경 내용이 포함됩니다. 이러한 문서는 제안된 사양 변경이 완료되고 현재 ECMA 사양에 통합될 때까지 게시됩니다.
기능 사양과 완료된 구현 간에 약간의 불일치가 있을 수 있습니다. 이러한 차이는 관련언어 디자인 모임 (LDM) 노트에서 기록됩니다.
사양문서에서 C# 언어 표준에 기능 사양을 채택하는 과정에 대해 더 자세히 알아보실 수 있습니다.
챔피언 이슈: https://github.com/dotnet/csharplang/issues/4394
요약
예를 들어 속성 하위 패턴이 중첩된 멤버를 참조할 수 있도록 허용합니다.
if (e is MethodCallExpression { Method.Name: "MethodName" })
대신에:
if (e is MethodCallExpression { Method: { Name: "MethodName" } })
동기
자식 속성과 일치하려고 할 때, 재귀 패턴을 중첩하면 많은 노이즈가 추가되어 가독성이 떨어지며, 실제로 얻는 이점도 없습니다.
상세 디자인
property_pattern 구문은 다음과 같이 수정됩니다.
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
+ ;
각 이름 조회의 수신기는 property_pattern 입력 형식부터 시작하여 T0 이전 멤버의 형식입니다. T이 null 가능 형식이면 T0은 그것의 기본 형식이고, 그렇지 않으면 T0은 T과 같습니다.
예를 들어 { Prop1.Prop2: pattern }
양식의 패턴은 { Prop1: { Prop2: pattern } }
정확히 동일합니다.
T null 허용 값 형식 또는 참조 형식인 경우 null 검사가 포함됩니다. 이 null 검사는 사용 가능한 중첩 속성이 T아니라 T0속성이 됨을 의미합니다.
반복 멤버 경로가 허용됩니다. 패턴 일치의 컴파일은 패턴의 일반적인 부분을 활용할 수 있습니다.
C# feature specifications