VauleTuple

概述

VauleTuple,也叫 值元组,是一种具有特定 数量顺序结构体(值)类型 的数据结构。

🍕VauleTuple出自C#7.0,是对出自C#4.0的Tuple的优化。优化点在于:

  • VauleTuple为结构体(值)类型,Tuple为类(引用)类型。
  • VauleTuple元素是可变的,Tuple是只读的,也就是说可以改变 VauleTuple中的元素值。
  • VauleTuple的数据成员是字段,Tuple是属性。

一.创建VauleTuple

🍕利用构造函数创建VauleTuple,正常情况下最多拥有7个元素。如果想要创建更多元素,需要使用VauleTuple的嵌套。

//创建拥有7个元素的ValueTuple
var valueTuple1 = new ValueTuple<int, int, int, int, int, int, int>(1, 2, 3, 4, 5, 6, 7);
//创建拥7有个以上元素的ValueTuple
var valueTuple2 = new ValueTuple< int, int, int, int, int, int, int, ValueTuple<int, int, int>>(1,2,3,4,5,6,7,new ValueTuple<int,int,int>(8,9,10));

🍕利用静态方法创建VauleTuple,最多拥有8个元素。

var valueTuple3= ValueTuple.Create(1, 2, 3, 4, 5, 6, 7, 8);

注意 :使用静态方法Create()创建ValueTuple时,最后一个元素的类型为ValueTuple<int>

ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>> valueTuple  = ValueTuple.Create(1, 2, 3, 4, 5, 6, 7, 8);

二.访问VauleTuple元素

var valueTuple = new ValueTuple< int, int, int, int, int, int, int, ValueTuple<int, int, int>>(1,2,3,4,5,6,7,new ValueTuple<int,int,int>(8,9,10));

🍕访问8个以下元素,使用valueTuple.ItemX

Console.WriteLine(valueTuple.Item1);

🍕访问8个或8个以上元素,使用valueTuple.Rest.ItemX或者valueTuple.ItemX

Console.WriteLine(valueTuple.Rest.Item3);
Console.WriteLine(valueTuple.Item10);

三.使用情形

1.发送消息时传递多个数据

🍕该发送消息的形式用于PureMvc中,不必关注这一点,只需注意带有注释的地方就行了。意在表达:当需要将少量数据传递出去时,创建ValueTuple的便捷,不必再额外创建其他类型。

int roleId=1;
string roleName="Tom";
//创建一个ValueTuple并将其发送出去。
SendNotification(GameConsts.Notifications.RERFESH_UI,(roleId,roleName));
...
//接收消息调用相关方法,同时将ValueTuple中的数据传入方法。
case GameConsts.Notifications.RERFESH_UI:
if (notification.Body is ValueTuple<int,string> uiData)
{
    RefreshUI(uiData.Item1,uiData.Item2);
}
break;

2.从方法中返回多个值

🍕与参数修饰符refout有相似的作用。

public ValueTuple<int,string> ReturnValueTuple() 
{
    return (1, "Bob");
}

🍕方法头中返回值部分也可以替换成以下几种形式。

//简写形式
public (int,string) ReturnValueTuple() 
{
    return (1, "Bob");
}
//指定元素的名称,便于记忆,并且在调用时可以通过名称获取元素,不易出错。
//实际上ValueTuple并没有“index”和“name”,该名称只用于设计和编译,不是运行时用的。
public (int index,string name) ReturnValueTuple() 
{
    return (1, "Bob");
}
...
var valueTuple = ReturnValueTuple();
Console.WriteLine($"Index:{valueTuple.index},Name:{valueTuple.name}");

3.解构ValueTuple

🍕在第三种形式中,指定方法头中返回值元素的名称后,在调用方法接收返回值时,可以通过var (x, y)或(var x, var y)来解析ValueTuple元素构造局部变量,同时可以使用符号”_”来忽略不需要的元素。

public (int index, string name) ReturnValueTuple()
{
    return (1, "Bob");
}
...
var (index1,name1)= ReturnValueTuple();
Console.WriteLine($"Index:{index1},Name:{valueTuple.name1}");
(var index2, var name2) = ReturnValueTuple();
Console.WriteLine($"Index:{index2},Name:{name2}");
var(_,name3)= ReturnValueTuple();
Console.WriteLine($"Name:{name3}");

四.参考

详解C# Tuple VS ValueTuple

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值