首页 > 技术文章 > 深入解密.NET(Tuple元祖)

xmai 2017-04-27 11:05 原文

元组(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;
  
***
  ***

 

推荐阅读