【发布时间】:2012-11-30 06:47:32
【问题描述】:
请有人解释一下元组是什么以及如何在真实世界场景中使用它。我想了解这如何丰富我的编码体验?
【问题讨论】:
标签: c# .net c#-4.0 .net-4.0 tuples
请有人解释一下元组是什么以及如何在真实世界场景中使用它。我想了解这如何丰富我的编码体验?
【问题讨论】:
标签: c# .net c#-4.0 .net-4.0 tuples
msdn article 用示例很好地解释了这一点,“元组是一种具有特定数量和元素序列的数据结构”。
元组通常有四种使用方式:
表示单个数据集。例如,一个元组可以 表示一个数据库记录,它的组件可以表示 记录的各个字段。
提供对数据集的轻松访问和操作。
从一个方法返回多个值而不使用 out 参数 (在 C# 中)或
ByRef参数(在 Visual Basic 中)。通过单个参数将多个值传递给方法。为了 例如,
Thread.Start(Object)方法有一个参数 允许您为线程执行的方法提供一个值 启动时间。如果您提供Tuple<T1, T2, T3>对象作为方法 参数,您可以为线程的启动例程提供三个 数据项。
【讨论】:
元组允许您将可能不同类型的多个值组合成一个对象,而无需创建自定义类。如果您想编写一个例如返回三个相关值但又不想创建新类的方法,这会很有用。
通常你应该创建一个类,因为这允许你为每个属性赋予有用的名称。大量使用元组的代码将很快变得不可读,因为这些属性称为Item1、Item2、Item3 等。
【讨论】:
元组和类的区别在于元组没有属性名。这几乎从来都不是一件好事,我只会在参数相当无意义时使用元组,例如在抽象数学公式中。超过 5,6,7 维的抽象微积分可能需要一个元组作为坐标。
【讨论】:
这是了解元组类型最重要的事情。元组是一个类,而不是一个结构。因此它将在托管堆上分配。分配的每个类实例都会增加垃圾收集的负担。
注意: 属性 Item1、Item2 和进一步没有设置器。您不能分配它们。元组在内存中创建后是不可变的。
【讨论】:
元组类允许开发人员“快速而懒惰”,无需为特定用途定义特定类。
属性名称为 Item1、Item2、Item3 ...,在某些情况下或没有文档时可能没有意义。
元组类具有强类型的泛型参数。 Tuple 类的用户仍然可以从泛型参数的类型中推断出来。
【讨论】: