设为首页 加入收藏

TOP

详解C# Tuple VS ValueTuple(元组类 VS 值元组)
2017-06-18 10:22:04 】 浏览:3872
Tags:详解 Tuple ValueTuple 元组类 元组

C# 7.0已经出来一段时间了,大家都知道新特性里面有个对元组的优化:ValueTuple。这里利用详尽的例子详解Tuple VS ValueTuple(元组类VS值元组),10分钟让你更了解ValueTuple的好处和用法。


如果您对Tuple足够了解,可以直接跳过章节”回顾Tuple”,直达章节”ValueTuple详解”,查看值元组的炫丽用法。


Tuple是C# 4.0时出的新特性,.Net Framework 4.0以上版本可用。


元组是一种数据结构,具有特定数量和元素序列。比如设计一个三元组数据结构用于存储学生信息,一共包含三个元素,第一个是名字,第二个是年龄,第三个是身高。


元组的具体使用如下:


默认情况.Net Framework元组仅支持1到7个元组元素,如果有8个元素或者更多,需要使用Tuple的嵌套和Rest属性去实现。另外Tuple类提供创造元组对象的静态方法。


Note:这里构建出来的Tuple类型其实是Tuple<int, int, int, int, int, int, int, Tuple<int>>,因此testTuple8.Rest取到的数据类型是Tuple<int>,因此要想获取准确值需要取Item1属性。


如下创建一个元组表示一个学生的三个信息:名字、年龄和身高,而不用单独额外创建一个类。


当一个函数需要返回多个值的时候,一般情况下可以使用out参数,这里可以用元组代替out实现返回多个值。


4.    用于单参数方法的多值传递


当函数参数仅是一个Object类型时,可以使用元组实现传递多个参数值。


尽管元组有上述方便使用的方法,但是它也有明显的不足:


因此在C# 7.0中引入了一个新的ValueTuple类型,详见下面章节。


ValueTuple是C# 7.0的新特性之一,.Net Framework 4.7以上版本可用。


值元组也是一种数据结构,用于表示特定数量和元素序列,但是是和元组类不一样的,主要区别如下:


值元组的具体使用如下:


和元组类一样,.Net Framework值元组也只支持1到7个元组元素,如果有8个元素或者更多,需要使用值元组的嵌套和Rest属性去实现。另外ValueTuple类可以提供创造值元组对象的静态方法。


注意这里构建出来的Tuple类型其实是Tuple<int, int, int, int, int, int, int, Tuple<int>>,因此testTuple8.Rest取到的数据类型是Tuple<int>,因此要想获取准确值需要取Item1属性。


优化区别:当构造出超过7个元素以上的值元组后,可以使用接下来的ItemX进行访问嵌套元组中的值,对于上面的例子,要访问第十个元素,既可以通过testTuple10.Rest.Item3访问,也可以通过testTuple10.Item10来访问。


如下创建一个值元组表示一个学生的三个信息:名字、年龄和身高,而不用单独额外创建一个类。


值元组也可以在函数定义中代替out参数返回多个值。


优化区别:返回值可以不明显指定ValueTuple,使用新语法(,,)代替,如(string, int, uint):


调试查看studentInfo的类型就是ValueType三元组。


优化区别:返回值可以指定元素名字,方便理解记忆赋值和访问:


方便记忆赋值:



方便访问:



当函数参数仅是一个Object类型时,可以使用值元组实现传递多个值。


可以通过var (x, y)或者(var x, var y)来解析值元组元素构造局部变量,同时可以使用符号”_”来忽略不需要的元素。


由上所述,ValueTuple使C#变得更简单易用。较Tuple相比主要好处如下:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于 Java垃圾回收机制 下一篇Java面向对象的数组化信息处理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目