Полное руководство по языку программирования С# 14 и платформе .NET 10 / Pattern matching

Паттерны кортежей

Начальный ⏱ 2 мин чтения 👁 2 🕓 обновлено 11.08.2026

Паттерны кортежей позволяют сравнивать значения кортежей. Например, передадим в конструкцию switch кортеж с названием языка и времени дня и в зависимости от переданных данных возвратим определенное сообщение:


string GetWelcome(string lang, string daytime) => (lang, daytime) switch
{
	("english", "morning") => "Good morning",
	("english", "evening") => "Good evening",
	("german", "morning") => "Guten Morgen",
	("german", "evening") => "Guten Abend",
	_ => "Здрасьть"
};

Здесь в метод передаются два значения, из которых создается кортеж (можно и сразу передать в метод кортеж). Далее в конструкции switch с помощью круглых скобок определяются значения, которым должны соответствовать элементы кортежа. Например, выражение ("english", "morning") => "Good morning" будет выполняться, если одновременно lang="english" и datetime="morning".

Применение:


string message = GetWelcome("english", "evening");
Console.WriteLine(message);  // Good evening

message = GetWelcome("french", "morning");
Console.WriteLine(message);  // Здрасьть

Нам не обязательно сравнивать все значения кортежа, мы можем использовать только некоторые элементы кортежа. В случае, если мы не хотим использовать элемент кортежа, то вместо него ставим прочерк:


string GetWelcome(string lang, string daytime, string status) => (lang, daytime, status) switch
{
	("english", "morning", _) => "Good morning",
	("english", "evening", _) => "Good evening",
	("german", "morning", _) => "Guten Morgen",
	("german", "evening", _) => "Guten Abend",
	(_, _, "admin") => "Hello, Admin",
	_ => "Здрасьть"
};

Теперь кортеж состоит из трех элементов. Но первые четыре выражения не используют последний элемент кортежа, допустим, он не важен, поэтому вместо него ставится прочерк ("english", "morning", _).

А в предпоследнем примере, наоборот, не важны первые два элемента, а важен третий элемент: (_, _, "admin") =>.

Но в любом случае нам надо указать конкретные значения или прочерки для всех элементов кортежа.


string message = GetWelcome("english", "evening", "user");
Console.WriteLine(message);  // Good evening

message = GetWelcome("french", "morning", "admin");
Console.WriteLine(message);  // Hello, Admin

Проверь себя

📋 Тест по теме «Паттерны кортежей» Тест по теме

Практические задания

Лёгкое Ручная проверка Заполните пропуск в коде (1)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string _____(string lang, string daytime) => (lang, daytime) switch
{
	("english", "morning") => "Good morning",
	("english", "evening") => "Good evening",
	("german", "morning") => "Guten Morgen",
	("german", "evening") => "Guten Abend",
	_ => "Здрасьть"
};
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (2)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string message = _____("english", "evening");
Console.WriteLine(message);  // Good evening

message = GetWelcome("french", "morning");
Console.WriteLine(message);  // Здрасьть
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string GetWelcome(string lang, string _____, string status) => (lang, daytime, status) switch
{
	("english", "morning", _) => "Good morning",
	("english", "evening", _) => "Good evening",
	("german", "morning", _) => "Guten Morgen",
	("german", "evening", _) => "Guten Abend",
	(_, _, "admin") => "Hello, Admin",
	_ => "Здрасьть"
};
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (4)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string message = GetWelcome("english", "_____", "user");
Console.WriteLine(message);  // Good evening

message = GetWelcome("french", "morning", "admin");
Console.WriteLine(message);  // Hello, Admin
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (5)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string GetWelcome(string lang, string daytime) => (lang, daytime) switch
{
	("english", "_____") => "Good morning",
	("english", "evening") => "Good evening",
	("german", "morning") => "Guten Morgen",
	("german", "evening") => "Guten Abend",
	_ => "Здрасьть"
};
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (1)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

string GetWelcome(string lang, string daytime) => (lang, daytime) switch
{
	("_____", "morning") => "Good morning",
	("english", "evening") => "Good evening",
	("german", "morning") => "Guten _____",
	("german", "evening") => "Guten Abend",
	_ => "Здрасьть"
};
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (2)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

string _____ = GetWelcome("english", "evening");
Console.WriteLine(_____);  // Good evening

message = GetWelcome("french", "morning");
Console.WriteLine(message);  // Здрасьть
Войдите, чтобы отправить решение
Среднее Ручная проверка Расставьте строки кода в правильном порядке
+20 XP

Строки кода из примера этого урока перемешаны. Впишите их в правильном порядке, каждую строку — с новой строки.

{
	("english", "evening") => "Good evening",
	("english", "morning") => "Good morning",
	("german", "evening") => "Guten Abend",
string GetWelcome(string lang, string daytime) => (lang, daytime) switch
	_ => "Здрасьть"
};
	("german", "morning") => "Guten Morgen",
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «Паттерны кортежей»
+30 XP

Опишите своими словами, что делает приведённый пример кода из урока «Паттерны кортежей», и предложите одно осмысленное изменение (например, другое входное значение или дополнительное условие). Приведите итоговый код.

string GetWelcome(string lang, string daytime) => (lang, daytime) switch
{
	("english", "morning") => "Good morning",
	("english", "evening") => "Good evening",
	("german", "morning") => "Guten Morgen",
	("german", "evening") => "Guten Abend",
	_ => "Здрасьть"
};
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «Паттерны кортежей»
+30 XP

Изучите приведённый фрагмент кода и опишите, при каких входных данных или условиях он может сработать не так, как ожидается (граничный случай, отсутствие проверки и т.п.). Предложите исправленный вариант.

string message = GetWelcome("english", "evening");
Console.WriteLine(message);  // Good evening

message = GetWelcome("french", "morning");
Console.WriteLine(message);  // Здрасьть
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «Паттерны кортежей»
+50 XP

Соберите небольшую программу, которая последовательно демонстрирует ключевые идеи урока. Программа должна быть рабочей и содержать минимум два самостоятельно написанных фрагмента, а не просто копию примера из урока.

Войдите, чтобы отправить решение
Домашнее задание Ручная проверка Домашнее задание по теме «Паттерны кортежей»
+25 XP

Напишите собственную небольшую программу, применяющую материал темы «Паттерны кортежей». Используйте не менее одной конструкции, показанной в примерах урока. Прикрепите код решения и краткое описание того, что он делает.

Войдите, чтобы отправить решение

Обсуждение (0)

Войдите, чтобы оставить комментарий.