TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1929 1.47K
День 1583. #ЗаметкиНаПолях #TipsAndTricks
Интересные Вещи, Которые Можно Делать с Кортежами
Сегодня рассмотрим, что такое кортежи и некоторые вещи, которые можно сделать с ними.

Кортежи (ValueTuple) в C# — это упрощённый изменяемый тип-значение, который позволяет группировать несколько значений или связанных данных вместе для различных целей, таких как возврат нескольких значений из метода, создание структурированных данных и т.п. Он обеспечивает более высокую производительность по сравнению с традиционными ссылочными типами, поскольку не требует аллокации на куче.

(string Name, int Age) person = ("Jon Smith", 42);
person.Name; // "Jon Smith"
person.Age; // 42

static (string Name, int Age) GetPerson()
=> ("Jon Smith", 42);

Что же можно делать с помощью кортежей?

1. Поменять местами два значения
Допустим, мы хотим поменять местами значения двух переменных:
int a = 1;
int b = 2;
// Замена
(a, b) = (b, a);

2. Простая реализация IEquatable
А также простой способ сравнения двух объектов или получения хэш-кода:
public class Dimension : IEquatable<Dimension>
{
public Dimension(int width, int height)
=> (Width, Height) = (width, height);

public int Width { get; }
public int Height { get; }

public bool Equals(Dimension d)
=> (Width, Height) == (d?.Width, d?.Height);

public override bool Equals(object o)
=> o is Dimension d && Equals(d);

public override int GetHashCode()
=> (Width, Height).GetHashCode();
}

3. Сопоставление по шаблону
Кортежи позволяют писать элегантный и выразительный код:
(string Name, int Age) person = ("Alice", 25);
string desc = person switch
{
("Alice", >= 0 and < 13) => "Alice ребёнок.",
("Alice", >= 13 and < 20) => "Alice подросток.",
("Alice", _) => "Alice взрослая.",
(_, >= 0 and < 13) => "Это ребёнок.",
(_, >= 13 and < 20) => "Это подросток.",
_ => "Это взрослый."
};

4. Деконструкция пользовательских типов
Кортежи позволяют легко разбить тип на отдельные переменные:
public class Student
{
public string Name { get; set; }
public int Age { get; set; }

public void Deconstruct(out string name, out int age)
{
name = Name;
age = Age;
}
}

var student = new Student { Name = "John", Age = 21 };
var (studentName, studentAge) = student;

См. подробнее о деконструкции

Источник: https://steven-giesel.com/blogPost/bcbb602f-4080-4e89-9929-019bb4e1cb58
  • 👍 24
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 →