元组

本文详细介绍了C#中的元组功能,包括元组的声明、初始化和解构,以及如何在方法返回中使用元组。C# 7引入的元组语法使得元组更易用,允许在不定义自定义类或结构的情况下返回多个值。文中通过示例展示了元组的使用,如元组字面量、命名元组、元组解构,以及与旧版Tuple类的区别和兼容性。此外,还讨论了元组在链表和LINQ查询中的应用,强调了元组作为值类型在性能上的优势。
摘要由CSDN通过智能技术生成

元组能够组合不同类型的对象。使用数组可以组合相同类型的对象,而元组允许使用类型的不同组合。元组有助于减少以下两个需求:

  • 定义自定义类或结构,以返回多个值
  • 定义参数,从方法中返回多个值

自从.NET Framework 4.0 版本以来,元组就以泛型Tuple类的形式存在。然而,它们并没有得到广泛使用,因为元组的不同对象可以通过Item1、Item2、Item3等属性访问,这既不吸引人,也没有提供任何关于其含义的信息。

这在C# 7 中发生了变化,C# 7 提供了在编程语言中集成的元组功能,这有了很大的改进,如下一个示例所示,它使用了一个简单的不可变的Person类:

    public class person 
    {
        public person (string firstName, string lastName) 
        {
            FirstName = firstName;
            LastName = lastName;
        }
        public string FirstName { get; }
        public string LastName { get; }
        public override string ToString () => $"{FirstName} {LastName}"
    }

元组的声明和初始化

可以使用圆括号声明一个元组,并使用通过括号创建的元组字面量来初始化。在下面的代码片段中,左侧声明了一个元组变量t,其中包含了一个字符串、一个int和一个Person。右边使用一个元组字面量来创建一个元组,它包含字符串magic、数字4、以及使用Person类的构造函数初始化的Person对象。访问元组时,可以使用变量t以及在括号中声明的成员(本例中为s、i和p)。

        public static void IntroTuples()
        {
            (string s,int i,Person p) t = ("magic",42,new Person("Stephanie","Nagel"));
            System.Console.WriteLine($"s: {t.s}, i: {t.i}, p: {t.p}");
        }

运行应用程序时,输出显示了元组的值:

s: magic, i: 42, p: Stephanie Nagel

元组字面量也可以分配给元组变量,而不需要声明它的成员。这样,元组的成员就可以使用ValueTuple结构的成员名称来访问:Item1、Item2和Item3。

            var t2 = ("magic",42,new Person("Stephanie","Nagel"));
            System.Console.WriteLine($"string: {t2.Item1},int: {t2.Item2},person: {t2.Item3}");

可以通过定义名称后跟冒号,来为元组字面量中的元组指定名称,它与对象字面量的语法相同:

            var t3 = (s: "magicj", i: 42, p: new Person("Matthias","Nagel"));
            System.Console.WriteLine($"s: {t3.s}, i: {t3.i}, p: {t3.p}");

有了这些,名字只是一种方便的方式。当类型匹配时,可以将一个元组分配给另一个元组;名字并不重要:

            (string astring,int anumber,Person aperson) t4 = t3;
            System.Console.WriteLine($"s: {t4.astring}, i: {t4.anumber}, p: {t4.aperson}");

元组解构

还可以将元组分解为变量。为此,只需要从前面的代码示例中删除元组变量,并在括号中定义变量名。然后可以直接访问变量,其中包含元组部分的值:

        public static void TupleDeconstruction()
        {
            (string s,int i,Person p) = ("magic",42,new Person("Stephanie","Nagel"));
            System.Console.WriteLine($"s: {s}, i: {i}, p: {p}");
        }

还可以使用var关键字声明解构的变量;类型由元组字面量定义。还可以在初始化之前声明变量,并将元组分解为现有变量:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值