什么和何时使用Tuple?
请有人解释一下Tuple是什么以及如何在真实世界场景中使用它。 我想知道这可以丰富我的编码体验吗?
这个msdn文章用例子很好的解释了这个问题,“ 一个元组是一个具有特定数量和元素序列的数据结构 ”。
元组通常以四种方式使用:
代表一组数据。 例如,一个元组可以代表一个数据库logging,其组件可以代表logging的各个字段。
为了方便访问和操作数据集。
从一个方法返回多个值而不使用参数(在C#中)或
ByRef
参数(在Visual Basic中)。通过单个参数将多个值传递给方法。 例如,
Thread.Start(Object)
方法有一个参数,可以让您为启动时线程执行的方法提供一个值。 如果提供Tuple<T1, T2, T3>
对象作为方法参数,则可以为线程的启动例程提供三项数据。
元组允许您将多个可能不同types的值组合到一个对象中,而无需创build自定义类。 如果你想编写一个方法,例如返回三个相关的值,但不想创build一个新的类,这可能很有用。
通常,虽然你应该创build一个类,因为这允许你给每个属性赋予有用的名字。 广泛使用元组的代码将很快变得不可读,因为这些属性被称为Item1
, Item2
, Item3
等。
元组和类之间的区别在于元组没有属性名称。 这几乎从来就不是一件好事,当参数是相当无意义的时候,我只会使用一个元组,例如在一个抽象的math公式Eg中。 在5,6,7维上的抽象微积分可能需要一个元组作为坐标。
这是了解元组types的最重要的事情。 元组是一个类,而不是一个结构。 因此它将被分配到托pipe堆上。 每个分配的类实例都会增加垃圾收集的负担。
注意:属性Item1,Item2,还没有setter。 你不能分配他们。 一旦在内存中创build,Tuple是不可变的。
元组类允许开发人员通过不为特定用途定义特定的类来“快速和懒惰”。
属性名称是Item1,Item2,Item3 …,在某些情况下可能没有意义或者没有文档。
元组类具有强types的通用参数。 Tuple类的用户仍然可以从generics参数的types中推断出来。