TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #57 547
День сорок шестой. #ЗаметкиНаПолях
Кортежи
C# предоставляет богатый синтаксис классов и структур, который можно использовать для различных целей проектирования. Но иногда даже такой богатый синтаксис требует дополнительной работы, которая не приносит особой пользы. Вам может потребоваться написать метод, который использует простую структуру, содержащую более одного элемента данных. Для поддержки таких сценариев в язык C# были добавлены кортежи. Кортежи – это простые структуры данных, содержащие несколько полей. Поля не проверяются, и вы не можете определить ваши методы для кортежа.
До С# 7 кортежи были отдельным классом, и работать с ними было не так удобно. В 7й версии языка появился упрощённый синтаксис. Вы можете создать кортеж, присвоив значение каждому его члену:
var letters = ("a", "b");
Обращаться к полям кортежа можно по именам Item1, Item2 и т.д. по порядку. Также им можно задать имена. Для этого есть два способа.
- Справа от оператора присваивания:
var alphabetStart = (Alpha: "a", Beta: "b");
- И слева от него:
(string Alpha, string Beta) namedLetters = ("a", "b");
Задание имён и справа, и слева приведёт к предупреждению компилятора, и имена справа будут проигнорированы.

Кортежи предоставляют упрощённый синтаксис для методов, возвращающих несколько дискретных значений. Вам не нужно создавать класс или структуру, определяющую возвращаемый тип. Создание кортежа более эффективно и более продуктивно. Пример ниже показывает метод, возвращающий максимальное и минимальное значения из последовательности целых чисел:
private static (int Max, int Min) Range(IEnumerable<int> numbers)
{
int min = int.MaxValue;
int max = int.MinValue;
foreach(var n in numbers)
{
min = (n < min) ? n : min;
max = (n > max) ? n : max;
}
return (max, min);
}
Объявление этого метода предоставляет имена полей возвращаемого кортежа. При вызове метода возвращаемым типом является кортеж, имена полей которого Max и Min:
var range = Range(numbers);
Console.WriteLine(range.Min);
Могут быть ситуации, когда вам нужно распаковать элементы кортежа, возвращённого из метода. Вы можете сделать это, объявив отдельные переменные для каждого из элементов кортежа. Это называется деконструкцией (разбором) кортежа:
(int max, int min) = Range(numbers);
Console.WriteLine($"{min} - {max}");

PS: использовать новые функции кортежей можно и в более ранних версиях языка, подключив пакет System.ValueTuple.

Источник: https://docs.microsoft.com/ru-ru/dotnet/csharp/whats-new/csharp-7#tuples
  • 👍 1
More from @netdeveloperdiary
  1. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
  2. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  3. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  4. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  5. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  6. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
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 →