自从使用了Tuple,再也不out了

介绍

Tuple的中文名:元组

Tuple的作用:

存储一组数据

可以使方法返回多个值,而不用out参数

 

在.NET Framework,4.7以前版本的元组叫Tuple,而4.7版本以后又引入一个元组叫ValueTuple

而在.NET Core中Tuple在1.0版本就存在,而在2.0引入了ValueTuple

 

如果在.NET Framework 4.7以前版本或.NET Core2.0以前版本要使用ValueTuple,可以通过NuGet安装System.ValueTuple

 

Tuple是C#4.0时出的新功能,而ValueTuple是C#7.0出的功能

Tuple与ValueTuple的基本区别就是,Tuple是类class,而ValueTuple是结构struct

ValueTuple的功能比Tuple强大

 

下面看看Tuple与ValueTuple的基本用法

 

用法

 

Tuple

 

创建元组

//通过构造函数来创建
var a = new Tuple<int, string>(1001, "Jack");

//通过静态方法Create来创建
var b = Tuple.Create(1002, "Tom");

 

Tuple最多可以创建8个元素,当然可以在元素中在定义Tuple

访问元组数据

可以通过Item1,Item2访问元组数据

 

//访问数据
var id =  a.Item1;
var name = a.Item2;

 

元组作为方法的返回值

public Tuple<int, string> GetUserInfo()
{
    return Tuple.Create(1001, "Jack");
}

接收数据

var user = GetUserInfo();

 

Tuple的功能较弱

1.元素只能读取,不能修改

2.只能通过Item1的形式访问元素,不能定义元素的名称

 

下面看看ValueTuple的用法,ValueTuple将解决上面Tuple的问题

 

ValueTuple

 

创建元组

有像上面Tuple类似的创建方法

var b = new ValueTuple<int, string>(1001, "Jack");
var d = ValueTuple.Create(1002, "Tom");

也可以通过 ( , ) 来创建,使代码更简洁

ValueTuple<int,string> userInfo1 = (1003, "Mark");
(int, string) userInfo2 = (1003, "Mark");
var userInfo3 = (1003, "Mark");

 

定义时给元素起个名

var userInfo1 = (id: 1003, name: "Mark");

(int id, string name) userInfo2 = (1003, "Mark");

访问元组数据

也是通过Item1,Item2访问元组数据

ValueTuple有一个好处就是可以定义元素的名称,起一个有意义的名称

 (int id, string name) userInfo = (1003, "Mark");

这样可以通过id和name访问数据了

 

ValueTuple不仅可以访问数据,还可以修改数据,即可读写

(int id, string name) userInfo = (1003, "Mark");
userInfo.id = 1010;
userInfo.name = "haha"; 

 

元组作为方法的返回值

可以这样

public ValueTuple<int, string> GetUserInfo()
{
    return ValueTuple.Create(1003, "Mark");
}

也可以简写

public (int, string) GetUserInfo2()
{
    return (1003, "Mark");
}

接收数据

可以通过定义元组接收

 (int, string) userInfo2 = GetUserInfo2();

也可以通过var接收

var userInfo3 = GetUserInfo2();

当然可以通过定义元组并定义元素名称,方便访问数据

(int id, string name) userInfo4 = GetUserInfo2();

var uid = userInfo4.id;
var uname = userInfo4.name;

这也可以在方法的返回值中定义元素名称

public (int id, string name) GetUserInfo2()
{
    return (1003, "Mark");
}

定义两个变量接收数据

(int id, string name)  = GetUserInfo2();

var uid = id;
var uname = name;

这种与上面的定义不同,这里定义的是两个变量

//定义一个ValueTuple
(int id, string name) userInfo1 = (1003, "Mark");

var uid = userInfo1.id;
var uname = userInfo1.name;

//定义两个变量
(int id, string name) = (1003, "Mark");

var uid2 = id;
var uname2 = name;

 

元组兼容性问题

元组的兼容性就是指元组的元素类型和顺序相同,名称不同无所谓

 

总结

可以说Tuple有的功能,ValueTuple都有,所以一般用ValueTuple​

ValueTuple使用 ( , ) 方式,使代码更简洁

ValueTuple既能读,又能写,比Tuple更实用

ValueTuple支持元素命名,方便使用

ValueTuple能作为方法的返回值,一次返回多个值,不用重新定义类作为参数或使用out参数

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GreAmbWang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值