什么和何时使用Tuple?

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

这个msdn文章用例子很好的解释了这个问题,“ 一个元组是一个具有特定数量和元素序列的数据结构 ”。

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

  1. 代表一组数据。 例如,一个元组可以代表一个数据库logging,其组件可以代表logging的各个字段。

  2. 为了方便访问和操作数据集。

  3. 从一个方法返回多个值而不使用参数(在C#中)或ByRef参数(在Visual Basic中)。

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

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

通常,虽然你应该创build一个类,因为这允许你给每个属性赋予有用的名字。 广泛使用元组的代码将很快变得不可读,因为这些属性被称为Item1Item2Item3等。

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

这是了解元组types的最重要的事情。 元组是一个类,而不是一个结构。 因此它将被分配到托pipe堆上。 每个分配的类实例都会增加垃圾收集的负担。

注意:属性Item1,Item2,还没有setter。 你不能分配他们。 一旦在内存中创build,Tuple是不可变的。

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

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

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