Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Заметка
Эта статья является спецификацией компонентов. Спецификация служит проектным документом для функции. Он включает предлагаемые изменения спецификации, а также информацию, необходимую во время проектирования и разработки функции. Эти статьи публикуются до тех пор, пока предложенные изменения спецификации не будут завершены и включены в текущую спецификацию 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
+ ;
Получатель для каждого поиска имени — это тип предыдущего члена T0, начиная с входного типа шаблона свойства . Если T является обнуляемым типом, T0 является его базовым типом, в противном случае T0 равно T.
Например, шаблон формы { Prop1.Prop2: pattern } точно эквивалентен { Prop1: { Prop2: pattern } }.
Обратите внимание, что это будет включать проверку null, если T является типом значений, допускающим значение NULL, или ссылочным типом. Эта проверка null означает, что доступные вложенные свойства будут свойствами T0, а не T.
Разрешены повторяющиеся пути к элементу. Компиляция сопоставления шаблонов может использовать общие элементы шаблонов.
C# feature specifications