Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1449. #ЗаметкиНаПолях Обзор Новых Функций C# 11. Продолжение Начало 1 Продолжение 2-3 4. Шаблоны списков (включено в релиз) Тренд современного C# - растущее использование методов функционального программирования. В частности, использование выражений, которые позволяют разработчикам заменить императивный код декларативным кодом. В C# 11 добавлено отличное расширение для синтаксиса выражения switch, позволяющее тестировать массивы. Оно называется выражениями списка, вот тривиальный пример:
int[] numbers = {24, 320, 700};
string test = numbers switch
{
  [24, 320, 700] => "Это нужный массив!",
  _ => "Не подходит" 
};

Этот код использует выражение switch для проверки массива. Если выражение соответствует первому массиву (а оно соответствует), переменной test присваивается строка «Это нужный массив!», в противном случае - строка «Не подходит». Шаблоны списков становятся намного интереснее, когда вы используете операторы .. или _ для создания срезов:
int[] numbers = {24, 320, 700};
string test = numbers switch
{
  [24, 32, 700] => "Это нужный массив!",
  [24, _, 700] => "2й элемент может быть любым",
  [24, .., 700] => "1й элемент 24, последний 700",
  [< 25, ..] => "1й элемент меньше 25",
  _ => "Не подходит"
};

Оператор .. представляет серию элементов (любое количество), а _ представляет один любой элемент. Таким образом, [24, .., 700] соответствует таким массивам, как [24, 200, 700] или [24, 324, 254, 525, 4, -4, 700]. Кроме того, можно использовать выражения и вместо самих элементов. Шаблон [< 25, ..] предполагает, что первый элемент массива меньше 25, а количество элементов не ограничено. Заметьте, что, как и в других вариантах использования сопоставления по шаблону в выражениях switch, в случае, когда входящему элементу соответствуют несколько шаблонов, будет использован первый подходящий шаблон. В данном случае - [24, _, 700], хотя [24, .., 700] и [< 25, ..] тоже подходят. Поэтому необходимо располагать шаблоны в switch выражении от частных к более общим. Если вы нарушите это правило, компилятор выдаст ошибку CS8510: The pattern is unreachable. It has already been handled by a previous arm of the switch expression or it is impossible to match. (Шаблон недостижим. Он уже был обработан предыдущим вариантом выражения switch или с ним невозможно сопоставиться.) Шаблоны списков работают не только с явно определёнными массивами. Любой тип с индексатором и свойствами Length и Count работает для фиксированных совпадений. Шаблоны срезов работают, если у типа есть индексатор, принимающий аргумент Range, или метод Slice с двумя параметрами типа int. Продолжение следует… Источник: https://medium.com/young-coder/a-mostly-complete-guide-to-c-11s-final-features-d43e6c9aa727