C#中的元组

51 阅读2分钟

元组的定义

(只说7.0之后的语法) 元组是一种轻量级的数据结构,它允许你将多个不同的数据类型存储在相同且未命名的对象,7.0往后元组存储在栈上。

元组的定义

namespace Learn3
{
    internal class Program
    {
        static void Main(string[] args)
        {
        
            //方式1  手动设置元组成员名称
            //int 元组成员的数据类型  num 元组成员的名称
            //Values 为元组名称
            //(1,"abc")  1为元组成员num的值 “abc”为元组成员str的值
            (int num, string str) Values = (1, "abc");
            
            
            //方式2 默认成员名称
            //int和string为元组成员的数据类型,Values为元组名称
            (int, string) Values1 = (1, "abc");
        }
    }
}

元组的成员名都是有默认值的,也就是说元组成员即使不命名可以使用默认名来使用它,元组的默认成员第一个是item1,第二个item2,以此类推。同时我们c#中有var关键字,var关键字编译器会自动将变量分配个适合的数据类型因此我们还可以这样写:

namespace Learn3
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var Values = (1,"abc",true);//使用元组默认名
            var Values1 = (num:1,str:"abc");//手动给元组成员命名
        }
    }
}

元组的使用

我们在使用元组应通过 元组名.元组成员名称 的方式 如下

namespace Learn3
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var Values = (1,"abc",true);
            var Values1 = (num:1,str:"abc");

            Console.WriteLine(Values.Item1+Values.Item2);//使用默认成员名调用
            Console.WriteLine(Values1.num+Values1.str);//使用成员名调用,如果手动给成员命名则默认名不可用
            
        }
    }
}

我们也可以通过解构的方式对元组进行解构,这里大致说一下解构

解构

解构是C#中的语法糖可以处理多个值的数据结构(大致意思是将一个数据结构中的值提取然后赋值给新的变量)注意解构是将值赋值给新的变量而不是引用,因此解构后的变量发生改变,原值不变

解构一般分为两种一种是元组解构一种是对象解构(这里只说元组解构)


namespace Learn3
{
    internal class Program
    {
        static void Main(string[] args)
        {


         
            var Values1 = (num:1,str:"abc");
            var (num1, str) = Values1; //对元组进行解构并将成员存储在num1和str中 此时num=1 str="abc"
            
        }
    }
}

元组的使用场景

元组最多的使用场景是一个函数返回多个值

由于类等都存储在堆中如果希望函数有多个返回值而不想使用存储在堆中的数据类型作为返回值 我们就可以使用元组。

namespace Learn3
{
    internal class Program
    {
        //使用函数返回多个值 函数返回值的类型定义-
        internal static (int,string) GetGet() 
        {
            //返回值定义-
            return (1,"abc");
        }
        static void Main(string[] args)
        {
            var a = GetGet();
            Console.WriteLine(a.Item1);
            
        }
    }
}

元组还有其它的使用场景,菜鸟正在学