命名元组元素
为元组字段指定有意义的名称。
命名元组元素 是 CoddyKit 上的免费 C# Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 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);
}
}方法签名中的命名元组
方法可以将命名元组声明为参数类型或返回类型,使 API 能够自我说明。
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);
}
}常见问题解答
「命名元组元素」课时是免费的吗?
是的 — 「命名元组元素」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 4 节课。
「命名元组元素」这节课中我会学到什么?
为元组字段指定有意义的名称。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C# Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「命名元组元素」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C# Academy 课中编写并运行代码吗?
能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 值元组基础
- 命名元组元素
- 解构
- 将元组作为方法返回值