Проверка коллекций часто превращается в цепочку условий: сначала Length, потом обращения по индексам, затем ещё несколько if.
В C# 11 появились списочные паттерны (List Patterns), которые позволяют описать форму коллекции прямо в switch.
🅰️ Квадратные скобки задают структуру, .. означает «любое количество элементов», а var позволяет сразу получить нужные значения.
static string Describe(int[] numbers) => numbers switch
{
[] => "пусто",
[var single] => $"один элемент: {single}",
[var first, var second] => $"два: {first} и {second}",
[var first, .., var last] => $"первый {first}, последний {last}",
};
Каждая ветка описывает форму данных, а не последовательность проверок. Не нужно вручную проверять Length и обращаться к элементам по индексам.
🅰️ Особенно удобно разбирать аргументы командной строки или результат Split().
static string Route(string[] args) => args switch
{
["run", var file] => $"запускаем {file}",
["build", .. var rest] => $"сборка с флагами: {string.Join(", ", rest)}",
_ => "неизвестная команда",
};
Обратите внимание на .. var rest: оператор среза не только пропускает элементы, но и позволяет сразу получить их в отдельную коллекцию. Списочные паттерны работают с массивами, списками и другими типами, которые поддерживают индексатор и имеют Length или Count.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view