C# ValueTuple(值元组)

C#7.0(.NET Framework 4.7)引入了 ValueTuple 结构,它是元组的值类型表示。

ValueTuple仅在.NET Framework 4.7中可用。如果您在项目中没有看到ValueTuple,则需要安装ValueTuple。(.NET Framework 4.7或更高版本,或.NET Standard Library 2.0或更高版本已包含ValueTuple。)

要安装ValueTuple软件包,请在解决方案资源管理器中的项目上单击鼠标右键,然后选择Manage NuGet Packages..。这将打开NuGet软件包管理器。单击Browse选项卡,在搜索框中搜索ValueTuple,然后选择System.ValueTuple包,如下所示。

在C#中使用ValueTuple

ValueTuple初始化

创建和初始化 ValueTuple 很容易。可以使用括号()并在其中指定值来创建和初始化它。

varperson=(1,"Bill","Gates");//等效元组//varperson=Tuple.Create(1,“Bill”,“Gates”);"Bill","Gates");

也可以通过指定各元素的类型初始化 ValueTuple ,如下所示。

ValueTuple<int,string,string>person=(1,"Bill","Gates");person.Item1;//返回1person.Item2;//返回"Bill"person.Item3;//返回"Gates"

以下是为每个成员声明类型的简写方法。

(int,string,string)person=(1,"Bill","Gates");person.Item1;//返回1person.Item2;//返回"Bill"person.Item3;//返回"Gates"

请注意,我们没有在上面的 tuple 初始化语句中使用 var 相反,我们在方括号中提供了每个成员值的类型。

元组至少需要两个值。以下不是元组的情况:

varnumber=(1);//int类型,不是元组varnumbers=(1,2);//有效元组

与 Tuple 不同,ValueTuple 可以包含八个以上的值。

varnumbers=(1,2,3,4,5,6,7,8,9,10,11,12,13,14);

命名成员

我们可以为ValueTuple属性分配名称,而不是使用默认属性名称,例如Item1,Item2等。

(intId,stringFirstName,stringLastName)person=(1,"Bill","Gates");person.Id;//返回1person.FirstName;//返回"Bill"person.LastName;//返回"Gates"

我们还可以在右侧为成员名称分配值,如下所示。

varperson=(Id:1,FirstName:"Bill",LastName:"Gates");

请注意,我们可以在左侧或右侧提供成员名称,但不能在两侧提供成员名称。左侧优先于右侧。以下内容将忽略右侧的名称。

//PersonId,FName,LName将被忽略。(intId,stringFirstName,stringLastName)person=(PersonId:1,FName:"Bill",LName:"Gates");//PersonId,FirstName,LastName将被忽略。它将具有默认名称:Item1,Item2,Item3。(string,string,int)person=(PersonId:1,FName:"Bill",LName:"Gates");

我们还可以将变量分配为成员值。

stringfirstName="Bill",lastName="Gates";varper=(FirstName:firstName,LastName:lastName);

ValueTuple作为返回类型

以下方法返回ValueTuple。

staticvoidMain(string[]args){DisplayTuple(1,"Bill","Gates");}staticvoidDisplayTuple((int,string,string)person){Console.WriteLine($"Id={person.Item1}");Console.WriteLine($"FirstName={person.Item2}");Console.WriteLine($"LastName={person.Item3}");}

我们还可以为方法返回的 ValueTuple 指定不同的成员名称。

staticvoidMain(string[]args){varperson=GetPerson();}static(int,string,string)GetPerson(){return(Id:1,FirstName:"Bill",LastName:"Gates");}

解构

可以通过解构 ValueTuple 来检索它的各个成员。解构声明语法将 ValueTuple 拆分为多个部分,并分别将这些部分分配给新变量。

staticvoidMain(string[]args){//更改属性名称(intPersonId,stringFName,stringLName)=GetPerson();}static(int,string,string)GetPerson(){return(Id:1,FirstName:"Bill",LastName:"Gates");}

我们还可以使用 var 代替显式数据类型名称。

staticvoidMain(string[]args){//使用var作为数据类型(varPersonId,varFName,varLName)person=GetPerson();}static(int,string,string)GetPerson(){return(Id:1,FirstName:"Bill",LastName:"Gates");}

ValueTuple 还允许对不打算使用的成员进行“丢弃”解构。

//对未使用的成员LName使用下划线_丢弃(varid,varFName,_)=GetPerson();
编辑于2024-05-20 15:58