0Pricing
C# Academy · 课时

命名元组元素

为元组字段指定有意义的名称。

命名元组元素 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 值元组基础
  2. 命名元组元素
  3. 解构
  4. 将元组作为方法返回值
← 返回 C# Academy