c#Tuple - Tuple的实际用途是什么

时间:2012-06-21 21:22:53

标签: c#

我在线查看Tuple的在线示例,但我认为没有任何理想的使用方法。

意思是,它似乎是一个存储变量的地方。

Tuple是否有任何实际用途。我喜欢做的是将一个值传递给元组,然后让它返回3个值,这些值都是字符串。

8 个答案:

答案 0 :(得分:11)

元组与List相对应。

当List存储相同类型项目的0-N时,Tuple存储1-M(可能)不同类型的项目,其中N是无界限的并且M是静态固定/定义的。

这些项目中的每一项都可以通过其名称(或恰好对齐的“索引”)以强类型方式访问。

因此它们与匿名类型类似(实际上,这更像是“记录”而不是“元组”,因为名称可以任意选择):

new { _0 = value0, _1 = value1, /* etc, as needed */ }

但是元组类型是主格类型(它们由许多不同的类支持,就像ActionFunc)因此特定< / em>可以显式指定元组类型(例如,在方法签名中),这是匿名类型不能用于的内容。

虽然我会说C#中Tuples的实际使用受到缺乏支持(例如没有分解,没有应用程序等)的阻碍,但它们在所有时间中都被使用在语言中斯卡拉。 C#方法通常是“创建一个新的命名类型”,但引入Tuple类型作为另一种可用工具。

(Tuples非常有用的一个重要地方是中间计算 - 但是C#具有匿名类型,与LINQ一样,在大多数情况下,在同一方法中完成计算时,它可以很好地完成这个角色。)< / p>

答案 1 :(得分:7)

Microsoft .NET 4.0引入了名为Tuple的类型,它是异构类型数据的固定大小集合。像数组一样,元组具有固定大小,一旦创建就无法更改。与数组不同,元组中的每个元素可以是不同的类型,元组能够保证每个元素的强类型。这在使用自定义类型或结构的情况下非常方便。

答案 2 :(得分:4)

Tuple是一个容器。你可以存储任何东西

对于3个项目,它称为Triple。 4项四重等等。

基本上你可以把物品贴在上面。

这是example

答案 3 :(得分:3)

元组是一种类型化,不可变且通用的构造。它是用于存储概念上相关数据的有用容器。带有注释成员和其他方法的简单类对于重要的事情更有用。但是元组可以用来存储杂项但相关的信息。元组在信息隐藏领域不足。它擅长作为一个有用的短期容器。

答案 4 :(得分:2)

实际用例:假设您希望在软件的不同内部组件之间传递结构化数据列表。

  1. 您可以声明一个代表结构化数据的类。在这种情况下,这个类必须是理想的哑巴,它只包含一堆自动属性。您可能在接口中将此声明为嵌入式类(但必须在其前面加上接口名称),或者在与接口相同的命名空间中声明。在某些时候,这可能是不必要的管道代码,用于为此目的定义唯一的类。
  2. 或者您可以使用元组。这样您就不必为所有这些定义类,您仍然可以保持类型安全。您可能会失去命名属性的优势,如果您有许多属性,甚至可能来自同一类型,这可能会有问题。
  3. 更具体的例子: 您想为TreeListView第三方组件设置列排序。您从控制器对象启动排序,控制器对象在视图上调用正确的函数(SortByColumns),该函数在第三方组件周围调用包装类上的函数,该组件调用第三方组件的正常功能。 / p>

    1. 如果您定义DTO(数据传输对象)对象:

      // Somewhere around an interface
      class ColumnSortItem
      {
          string Caption { get; set; }
          SortOrder Order { get; set; }
      }
      
      // Other places:
      void SortByColumns(IList<ColumnSortItem> pColumnSortItems);
      
    2. 元组:

      void SortByColumns(IList<Tuple<string, SortOrder>> pColumnSortItems);
      
    3. 我并不是说元组总是更好的选择,但请注意我们只需要声明某个项目的顺序和结构。请注意,在这个具体示例中,很清楚元组的字符串部分是什么以及SortOrder部分是什么。

      增加:函数的实际调用:

      1. DTO

        controller.SortByColumns(new List<ColumnSortItem>() {
            new ColumnSortItem() { Caption = "Record", Order = SortOrder.Ascending },
            new ColumnSortItem() { Caption = "Description", Order = SortOrder.Ascending }
          });
        
      2. 元组

        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);