上QQ阅读APP看书,第一时间看更新
7.8 元组
数组合并了相同类型的对象,而元组合并了不同类型的对象。元组起源于函数编程语言(如F#),在这些语言中频繁使用元组。在.NET Framework中,元组可用于所有的.NET语言。
.NET Framework定义了8个泛型Tuple类和一个静态Tuple类,它们用作元组的工厂。不同的泛型Tuple类支持不同数量的元素。例如,Tuple<T1>包含一个元素,Tuple<T1, T2>包含两个元素,依此类推。
方法Divide()返回包含两个成员的元组Tuple<int, int>。泛型类的参数定义了成员的类型,它们都是整数。元组用静态Tuple类的静态Create()方法创建。Create()方法的泛型参数定义了要实例化的元组类型。新建的元组用result和remainder变量初始化,返回这两个变量相除的结果(代码文件TupleSample/Program.cs):
public static Tuple<int, int> Divide(int dividend, int divisor) { int result = dividend / divisor; int remainder = dividend % divisor; return Tuple.Create(result, remainder); }
下面的代码说明了Divide()方法的调用。可以用属性Item1和Item2访问元组的项:
var result = Divide(5, 2); WriteLine($"result of division: {result.Item1}, remainder: {result.Item2}");
如果元组包含的项超过8个,就可以使用带8个参数的Tuple类定义。最后一个模板参数是TRest,表示必须给它传递一个元组。这样,就可以创建带任意个参数的元组了。
下面说明这个功能:
public class Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>
其中,最后一个模板参数是一个元组类型,所以可以创建带任意多项的元组:
var tuple = Tuple.Create<string, string, string, int, int, int, double, Tuple<int, int>>("Stephanie", "Alina", "Nagel", 2009, 6, 2, 1.37, Tuple.Create<int, int>(52, 3490));