Tuple:元组对象在.net中的实用

来源:互联网 发布:卡门 知乎 编辑:程序博客网 时间:2024/05/15 05:37

 Tuple:元组,一组有序的元素序列。 常常表示成员数目确定,每个成员类型也确定的结构。常常用于表示函数的多个返回值或者查询的结果等。Tuple应当是强类型的,即所有成员的类型在编译时确定。

.net中提供用于创建元组对象的静态方法。

  名称 说明 公共方法 静态成员 受 可移植类库 支持 Create<T1>(T1) 创建新的 1 元组,即单一实例。 公共方法 静态成员 受 可移植类库 支持 Create<T1, T2>(T1, T2) 创建新的 2 元组,即二元组。 公共方法 静态成员 受 可移植类库 支持 Create<T1, T2, T3>(T1, T2, T3) 创建新的 3 元组,即三元组。 公共方法 静态成员 受 可移植类库 支持 Create<T1, T2, T3, T4>(T1, T2, T3, T4) 创建新的 4 元组,即四元组。 公共方法 静态成员 受 可移植类库 支持 Create<T1, T2, T3, T4, T5>(T1, T2, T3, T4, T5) 创建新的 5 元组,即五元组。 公共方法 静态成员 受 可移植类库 支持 Create<T1, T2, T3, T4, T5, T6>(T1, T2, T3, T4, T5, T6) 创建新的 6 元组,即六元组。 公共方法 静态成员 受 可移植类库 支持 Create<T1, T2, T3, T4, T5, T6, T7>(T1, T2, T3, T4, T5, T6, T7) 创建新的 7 元组,即七元组。 公共方法 静态成员 受 可移植类库 支持 Create<T1, T2, T3, T4, T5, T6, T7, T8>(T1, T2, T3, T4, T5, T6, T7, T8)

创建新的 8 元组,即八元组。

元组通常用于通过四种方法:

  • 表示一组数据。 例如,元组可以表示一条数据库记录,并且其组件可以表示记录的各个字段。

  • 提供对数据集的轻松访问和操作。

  • 从方法返回的多个值,而无需使用 out 参数 (在 c# 中) 或 ByRef 参数 (在 Visual Basic 中为)。

  • 通过单个参数将多个值传递给一个方法。 例如, Thread.Start(Object) 方法具有一个可用来提供一个值写入方法线程执行在启动时的单个参数。 如果将Tuple<T1, T2, T3> 对象作为方法参数提供,则可以提供具有三项数据的线程启动例程。

Tuple 类本身并不表示元组。 相反,后者用于创建元组类型的实例提供静态方法从 .NET framework 支持的工厂类。 它提供可调用会实例化元组对象,而不必显式指定每个元组元素的类型的帮助器方法。

尽管可以通过调用其类构造函数创建元组类的实例,这样做的代码可能会相当麻烦的。 下面的示例使用类构造函数创建包含填充数据。一次填充调查的 new york 从 1950 到 2000 年的 7 元组或乘以七倍。

C#
VB
 
var population = new Tuple<string, int, int, int, int, int, int>(                           "New York", 7891957, 7781984,                            7894862, 7071639, 7322564, 8008278);

,如下面的示例所示,使用创建的帮助器方法的同一元组对象更为简单。

C#
VB
 
var population = Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278);
八个或更多组件的 n 元组

元组是一种数据结构,其中的值具有特定数目和序列。 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 类表示具有八个或更多组件的 n 元组。

可以通过调用静态 Tuple.Create 方法来实例化恰好包含八个组件的 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 对象。 下面的示例创建一个8 元组(八元组),其中包含小于 20 的质数 。 注意,它使用类型推理来确定每个组件的类型。

C#
VB
 
var primes = Tuple.Create(2, 3, 5, 7, 11, 13, 17, 19);

还可以通过调用 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 构造函数来实例化包含八个或更多组件的 n 元组对象。 下面的示例使用 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 构造函数创建一个 8 元组,该元组等效于前面的示例中创建的元组。

C#
VB
 
var primes = new Tuple<Int32, Int32, Int32, Int32, Int32, Int32, Int32,               Tuple<Int32>> (2, 3, 5, 7, 11, 13, 17, new Tuple<Int32>(19));
说明 说明

在九个或多个组件,则创建n元组必须调用 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 构造函数。 Tuple 类的静态工厂方法并不支持具有多于八个组件的 Tuple 对象的创建。

若要使用 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 构造函数实例化具有八个或更多组件的 n 元组,必须提供一个作为 rest 参数的泛型 Tuple 对象,以定义该元组的第八到 n 个组件。 通过以这种方式嵌套泛型 Tuple 对象,您可以创建一个对其组件数量没有实际限制的元组。

下面的示例创建一个 17 元组,该元组包含密歇根州底特律从 1860 到 2000 年每次国家普查的人口数据。 该元组的第一个组件为城市名。 第二个组件是数据系列的开始日期,第三个组件是开始日期的人口。 每个后续批次提供以十年为间隔的人口数。 17 元组是通过在 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 对象内嵌套Tuple<T1, T2, T3> 对象而创建的。 即,Tuple<T1, T2, T3> 对象作为 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 类构造函数中的 rest 参数的值提供。此Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 对象又嵌套在一个外部 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 对象中。 即,Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 对象作为外部 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 对象的类构造函数中的 rest 参数的值提供。

C#
VB
 
var from1980 = Tuple.Create(1203339, 1027974, 951270);var from1910 = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>     (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980);var population = new Tuple<string, int, int, int, int, int, int,    Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>>     ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910);

通过使用只读 Item1Item2Item3Item4Item5Item6 和 Item7 实例属性,可以检索元组的前七个组件的值。 任何其他组件都是嵌套的,可以从 Rest 属性中检索到。 在前一个示例中,Item1 到 Item7 属性检索元组的第一到七个组件。 第八到十四个组件包含在第二层嵌套的元组中,并由 Rest.Item1 到 Rest.Item7 属性表示。 第十五到十七个组件包含在第三层嵌套的元组中,并由 Rest.Rest.Item1 到 Rest.Rest.Item3 属性表示。

元组通常有四种不同的使用方式:

  • 表示一组数据。 例如,元组可以表示一条数据库记录,并且其组件可以表示记录的各个字段。

  • 提供对数据集的轻松访问和操作。

  • 在不使用 out 参数(在 C# 中)或 ByRef 参数(在 Visual Basic)的情况下,从方法中返回多个值。 例如,前一个示例在 Tuple<T1, T2, T3, T4, T5, T6, T7>对象中除返回城市名称外,还返回计算所得的统计信息。

  • 通过单个参数将多个值传递给一个方法。 例如,Thread.Start(Object) 方法有一个单一参数,可以使用该参数向在启动时线程执行的方法提供一个值。 如果将Tuple<T1, T2, T3, T4, T5, T6, T7> 对象作为方法参数提供,则可以提供具有七项数据的线程启动例程。

本文出自 “独钓寒江雪” 博客,请务必保留此出处http://zhaojie.blog.51cto.com/1768828/979852

0 0