深入解密.NET(Tuple元祖)
2017-04-27 11:05 huoit 阅读(1365) 评论(0) 编辑 收藏 举报元组(Tuple)数学概念上是指包含特定元素与数列的数据结构,n-Tuple称为一个n元祖。比如拿数据表来类比,数据表的每一行就是一个元祖,每一列是元祖的一个属性。
它可以视为由于你不想大动干戈创建一个类或者struct去抽象一个数据结构,只想要一个临时工来替代类或者struct的角色时候来充当临时工。Tuple充当一个简单对象存在。
举个例子:如果需要一个返回一个联系人的名字(string)和年龄(int),可能我们做如下封装
public class Contants { public string Name { get; set; } public int Age { get; set; } }
换一个场景,如果我们只知道一个函数需要返回string,int两个返回值,而不针对任何特定的对象。Tuple会是新的选择之一。
var t1=new Tuple<string, int>("xiaoMing", 20); var t2 = Tuple.Create<string,int>("", 20); Console.WriteLine(t1.Item1); Console.WriteLine(t1.Item2); Console.WriteLine(t1.GetHashCode());
Tuple的实现也很简单:Tuple<T1,……>最多8个参数,均继承一个internal的接口ITuple。Tuple负责创建上面的对象
内部实现,只读的readonly属性,哈希值、固定size等:
public class Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple { // Fields private readonly T1 m_Item1; private readonly T2 m_Item2; private readonly T3 m_Item3; private readonly T4 m_Item4; private readonly T5 m_Item5; private readonly T6 m_Item6; private readonly T7 m_Item7; private readonly TRest m_Rest;
***
***
1、如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!
2、欢迎各位转载,但是未经作者本人同意,转载文章请在文章页面明显位置标明作者和原文连接,否则保留追究法律责任的权利。
作者博客: http://www.cnblogs.com/xmai/