1.定义
在System命名空间,Microsoft定义了几个泛型Tuple类型,它们全部从Object派生,区别只在于泛型参数的个数。
2.用法
一般的,可以用它来存储和传递一个逻辑数据行,比如,在一次函数调用中,获取了员工的姓名和年龄,如果不想自定义类型,就可以通过以下方式,来把这一组类型不同的数据传递到函数外:
static Tuple<string, int> GetNameAndAge()
{
return new Tuple<string, int>("LeonHong", 26);
}
当然,不足之处在于,它没有自解释性,传递到函数外之后,生产者必须对其有足够的注释说明,否则,光看它的属性,只有诸如Item1,Item2...。如果作为API接口传递给别人使用,会让人摸不着头脑。
3.扩展
(1) 编译器只能在调用一个泛型方法时推断泛型类型,调用构造器时不能。因此System命名空间中还包含了一个非泛型静态Tuple类,其中包含了一组静态Create方法,他们可以根据实参来推断泛型的类型
static Tuple<string, int> GetNameAndAge( string name, int number )
{
return Tuple.Create(name, number);
}
(2)如果需要创建大于8个元素的一个Tuple,可以参见以下声明:
public class Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> : IStructuralEquatable, IStructuralComparable, IComparable
通过给TRest给定一个新的Tuple,来完成。