Именованные элементы кортежей
Присваивайте полям кортежа содержательные имена.
«Именованные элементы кортежей» — бесплатный урок C# Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Именование элементов кортежа
Вместо Item1/Item2 элементам кортежа можно задать имена, чтобы код было легче читать: (int Id, string Name).
using System;
class Program
{
static void Main()
{
(int Id, string Name) user = (1, "Ada");
Console.WriteLine(user.Id + ": " + user.Name);
}
}Имена в литерале
Имена можно указать непосредственно при создании кортежа, и компилятор их запомнит.
using System;
class Program
{
static void Main()
{
var point = (X: 3, Y: 4);
Console.WriteLine("X=" + point.X + ", Y=" + point.Y);
}
}Почему имена повышают ясность
Именованные элементы поясняют назначение данных. result.Total гораздо понятнее, чем result.Item2.
using System;
class Program
{
static void Main()
{
var result = (Count: 3, Total: 150);
Console.WriteLine("Avg: " + ((double)result.Total / result.Count).ToString("0.0"));
}
}Имена — необязательные метки
Имена элементов кортежа — это удобство времени компиляции. Внутри поля по-прежнему называются Item1, Item2; работают оба варианта имён.
using System;
class Program
{
static void Main()
{
var p = (Age: 30, City: "Rome");
Console.WriteLine(p.Age + " / " + p.Item1); // same value
Console.WriteLine(p.City + " / " + p.Item2);
}
}Именованные кортежи в сигнатурах методов
Метод может объявлять именованный кортеж в качестве типа параметра или возвращаемого значения, делая программный интерфейс самодокументируемым.
using System;
class Program
{
static (int Sum, int Product) Compute(int a, int b)
{
return (a + b, a * b);
}
static void Main()
{
var r = Compute(3, 4);
Console.WriteLine("Sum=" + r.Sum + ", Product=" + r.Product);
}
}Сочетание именованных и позиционных элементов
Некоторым элементам можно задать имена, а остальные оставить позиционными, хотя яснее давать имена всем элементам.
using System;
class Program
{
static void Main()
{
var data = (Id: 7, "guest", Active: true);
Console.WriteLine(data.Id + ", " + data.Item2 + ", " + data.Active);
}
}Имена с автоматическим выводом членов
При создании кортежа из именованных переменных C# может автоматически вывести соответствующие имена элементов.
using System;
class Program
{
static void Main()
{
int width = 10, height = 5;
var size = (width, height); // names inferred from variables
Console.WriteLine("w=" + size.width + ", h=" + size.height);
}
}Изменение именованных элементов
Именованные элементы по-прежнему являются доступными для записи полями, поэтому во время выполнения программы их можно переназначать.
using System;
class Program
{
static void Main()
{
var game = (Player: "A", Score: 0);
game.Score += 25;
Console.WriteLine(game.Player + " scored " + game.Score);
}
}Именованные кортежи в списках
Списки именованных кортежей читаются почти как строки таблицы.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var people = new List<(string Name, int Age)>
{
("Ann", 30),
("Bob", 25)
};
foreach (var p in people)
Console.WriteLine(p.Name + " is " + p.Age);
}
}Равенство и имена
Имена не влияют на равенство. Два кортежа равны, когда совпадают их значения, независимо от имён элементов.
using System;
class Program
{
static void Main()
{
var a = (X: 1, Y: 2);
var b = (A: 1, B: 2);
Console.WriteLine(a == b); // True - values match
}
}Собираем всё вместе
Именованные кортежи сочетают лёгкость кортежей с удобством чтения именованных полей и отлично подходят для понятных возвращаемых значений методов.
using System;
class Program
{
static (bool Ok, string Message) Validate(int age)
{
if (age < 0) return (false, "Age cannot be negative");
return (true, "Valid");
}
static void Main()
{
var v = Validate(-1);
Console.WriteLine(v.Ok + ": " + v.Message);
}
}Быстрая проверка
Проверьте, насколько хорошо вы понимаете именованные элементы кортежей.
Итоги
Именованные элементы кортежа, например (int Id, string Name), делают кортеж самодокументируемым: обращаться к элементам можно по имени, а не через Item1. Имена можно объявлять, выводить из переменных и использовать в сигнатурах методов. Это метки времени компиляции, не влияющие на равенство, которое сравнивает значения.
using System;
class Program
{
static void Main()
{
var user = (Id: 42, Name: "Kai");
Console.WriteLine(user.Name + " #" + user.Id);
}
}Часто задаваемые вопросы
Урок «Именованные элементы кортежей» бесплатный?
Да — полный текст урока «Именованные элементы кортежей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «Именованные элементы кортежей»?
Присваивайте полям кортежа содержательные имена. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Именованные элементы кортежей»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы кортежей значений
- Именованные элементы кортежей
- Декомпозиция
- Кортежи как возвращаемые значения методов