130

有人可以解释一下元组是什么以及如何在真实世界场景中使用它。我想知道这如何丰富我的编码经验?

4

5 回答 5

129

这篇msdn 文章通过示例很好地解释了它,“元组是一种具有特定数量和元素序列的数据结构”。

元组通常以四种方式使用:

  1. 表示一组数据。例如,一个元组可以表示一个数据库记录,它的组件可以表示记录的各个字段。

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

  3. ByRef在不使用 out 参数(在 C# 中)或参数(在 Visual Basic 中)的情况下从方法返回多个值。

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

于 2012-11-30T06:51:01.663 回答
79

元组允许您将可能不同类型的多个值组合到一个对象中,而无需创建自定义类。如果您想编写一个例如返回三个相关值但又不想创建新类的方法,这将很有用。

通常虽然您应该创建一个类,因为这允许您为每个属性提供有用的名称。大量使用元组的代码将很快变得不可读,因为属性被称为Item1Item2Item3等。

于 2012-11-30T06:52:09.237 回答
40

元组和类之间的区别在于元组没有属性名称。这几乎从来都不是一件好事,我只会在参数相当无意义时使用元组,例如在抽象数学公式中。超过 5,6,7 维的抽象微积分可能需要一个元组作为坐标。

于 2012-11-30T09:07:25.367 回答
26

这是关于 Tuple 类型最重要的事情。元组是一个类,而不是一个结构。因此它将在托管堆上分配。分配的每个类实例都会增加垃圾收集的负担。

注意:属性 Item1、Item2 和进一步没有设置器。您不能分配它们。元组在内存中创建后是不可变的。

于 2014-04-03T17:22:34.037 回答
22

元组类允许开发人员通过不为特定用途定义特定类来“快速和懒惰”。

属性名称是 Item1、Item2、Item3 ...,在某些情况下或没有文档时可能没有意义。

元组类具有强类型的泛型参数。Tuple 类的用户仍然可以从泛型参数的类型中推断出来。

于 2012-11-30T08:11:07.853 回答