我在线查看Tuple
的在线示例,但我认为没有任何理想的使用方法。
意思是,它似乎是一个存储变量的地方。
Tuple
是否有任何实际用途。我喜欢做的是将一个值传递给元组,然后让它返回3个值,这些值都是字符串。
答案 0 :(得分:11)
元组与List相对应。
当List存储相同类型项目的0-N时,Tuple存储1-M(可能)不同类型的项目,其中N是无界限的并且M是静态固定/定义的。
这些项目中的每一项都可以通过其名称(或恰好对齐的“索引”)以强类型方式访问。
因此它们与匿名类型类似(实际上,这更像是“记录”而不是“元组”,因为名称可以任意选择):
new { _0 = value0, _1 = value1, /* etc, as needed */ }
但是元组类型是主格类型(它们由许多不同的类支持,就像Action
或Func
)因此特定< / em>可以显式指定元组类型(例如,在方法签名中),这是匿名类型不能用于的内容。
虽然我会说C#中Tuples的实际使用受到缺乏支持(例如没有分解,没有应用程序等)的阻碍,但它们在所有时间中都被使用在语言中斯卡拉。 C#方法通常是“创建一个新的命名类型”,但引入Tuple
类型作为另一种可用工具。
(Tuples非常有用的一个重要地方是中间计算 - 但是C#具有匿名类型,与LINQ一样,在大多数情况下,在同一方法中完成计算时,它可以很好地完成这个角色。)< / p>
答案 1 :(得分:7)
Microsoft .NET 4.0引入了名为Tuple
的类型,它是异构类型数据的固定大小集合。像数组一样,元组具有固定大小,一旦创建就无法更改。与数组不同,元组中的每个元素可以是不同的类型,元组能够保证每个元素的强类型。这在使用自定义类型或结构的情况下非常方便。
答案 2 :(得分:4)
答案 3 :(得分:3)
元组是一种类型化,不可变且通用的构造。它是用于存储概念上相关数据的有用容器。带有注释成员和其他方法的简单类对于重要的事情更有用。但是元组可以用来存储杂项但相关的信息。元组在信息隐藏领域不足。它擅长作为一个有用的短期容器。
答案 4 :(得分:2)
实际用例:假设您希望在软件的不同内部组件之间传递结构化数据列表。
更具体的例子:
您想为TreeListView
第三方组件设置列排序。您从控制器对象启动排序,控制器对象在视图上调用正确的函数(SortByColumns
),该函数在第三方组件周围调用包装类上的函数,该组件调用第三方组件的正常功能。 / p>
如果您定义DTO(数据传输对象)对象:
// Somewhere around an interface
class ColumnSortItem
{
string Caption { get; set; }
SortOrder Order { get; set; }
}
// Other places:
void SortByColumns(IList<ColumnSortItem> pColumnSortItems);
元组:
void SortByColumns(IList<Tuple<string, SortOrder>> pColumnSortItems);
我并不是说元组总是更好的选择,但请注意我们只需要声明某个项目的顺序和结构。请注意,在这个具体示例中,很清楚元组的字符串部分是什么以及SortOrder部分是什么。
增加:函数的实际调用:
DTO
controller.SortByColumns(new List<ColumnSortItem>() {
new ColumnSortItem() { Caption = "Record", Order = SortOrder.Ascending },
new ColumnSortItem() { Caption = "Description", Order = SortOrder.Ascending }
});
元组
controller.SortByColumns(new List<Tuple<string, SortOrder>>() {
new Tuple<string, SortOrder>("Record", SortOrder.Ascending),
new Tuple<string, SortOrder>("Description", SortOrder.Ascending)
});
答案 5 :(得分:1)
Tuple是一个轻量级的类,可以将多个项目组合在一起。当您想要将两个项目组合在一起时,它可以替代定义新类。
当我想从单个方法返回多个项目时,我发现它很有用,但我不能使用ref或out参数。
答案 6 :(得分:1)
似乎存在临时数据存储;非常本地化的使用这些都是编写自己的课程太耗时或者不值得的时候,因为数据的生命周期很短。
答案 7 :(得分:0)
.NET Framework 4引入了System.Tuple类,用于创建包含结构化数据的元组对象。它还提供了通用元组类来支持具有一到八个组件的元组。 这是C#
中的示例var objTupe = new System.Tuple<string, string, double,long>"Mike","Anderson",29000,9999999999);
Response.Write("Item1 : " + objTupe.Item1);
Response.Write("<br/>Item2 : " + objTupe.Item2);
Response.Write("<br/>Item3 : " + objTupe.Item3);
Response.Write("<br/>Item4 : " + objTupe.Item4);