TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #1782 1.43K
День 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
  • 👍 18
More from @netdeveloperdiary
  1. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  2. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
  3. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  4. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
  5. Oct 5, 2026День 2805. #ЧтоНовенького #NET11 Аргументы в Выражениях Коллекций в C#15 В C#15 реализован…
  6. Oct 4, 2026День 2804. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →