Иногда нужно вернуть из метода два-три значения или временно сгруппировать данные. Создавать для этого отдельный класс — лишняя работа. В C# 7+ есть кортежи с именованными полями, и они закрывают эту задачу.
Как это выглядит
Самый простой пример:
var user = (Name: "John", Age: 25);
Console.WriteLine(user.Name); // John
Console.WriteLine(user.Age); // 25
Никакого класса, никакой модели. Просто структура с именами прямо там, где она нужна.
Где это помогает
Чаще всего кортежи с именами используют в возвращаемых значениях методов. Вместо того чтобы создавать
out-параметры или отдельный DTO, можно сделать так:public (string Name, bool IsValid) Validate(string input)
{
var isValid = !string.IsNullOrWhiteSpace(input);
return (input.Trim(), isValid);
}
var result = Validate(" John ");
Console.WriteLine(result.Name); // John
Console.WriteLine(result.IsValid); // True
Читаемость не хуже, чем у класса, а кода меньше.
Деконструкция
Кортеж можно сразу разложить по переменным:
var (name, isValid) = Validate(" John ");
Console.WriteLine(name); // John
Console.WriteLine(isValid); // TrueЭто удобно, если дальше в коде поля используются отдельно, а сам кортеж не нужен.
Когда кортеж не подходит
Кортежи хороши для локального использования и возвращаемых значений. Но если структура данных:
- передаётся между слоями приложения
- сериализуется в JSON или хранится в базе
- используется более чем в двух-трёх местах
Тогда лучше создать полноценный класс или
record. Кортеж не несёт никакой доменной семантики — это просто набор значений.📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view
