什么以及何时使用元组?

Don*_*nny 123 .net c# tuples .net-4.0 c#-4.0

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

Adi*_*dil 125

这篇msdn文章很好地解释了这个例子," 元组是一个具有特定数量和元素序列的数据结构 ".

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

  1. 表示单组数据.例如,元组可以表示数据库记录,其组件可以表示记录的各个字段.

  2. 提供对数据集的轻松访问和操作.

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

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


Mar*_*ers 76

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

通常你应该创建一个类,因为这允许你为每个属性提供有用的名称.是广泛使用的元组代码很快就会变得不可读,因为该特性被称为Item1,Item2,Item3,等.

  • 我最大限度地使用2个值,每个不同类型,即string,int.否则它将成为您可以编写的最差代码. (33认同)
  • 保持使用限制,可能更喜欢仅在类/模块中私下使用它.此外,包含复杂类型("Customer","Employee"等)的元组用法可能比原语更直接.没有比尝试使用大量的Tuple <int,int,int,string,string>更糟糕的了. (4认同)

Kai*_*ido 38

元组和类之间的区别在于元组没有属性名称.这几乎从来都不是一件好事,我只会在参数像抽象数学公式Eg中那样毫无意义时使用元组.5,6,7维度的抽象微积分可能需要一个坐标元组.


Azh*_*ani 24

这是了解Tuple类型最重要的事情.元组是一个类,而不是结构.因此,它将在托管堆上分配.分配的每个类实例都增加了垃圾收集的负担.

注意:属性Item1,Item2,并且还没有setter.你不能分配它们.一旦在内存中创建,元组就是不可变的.

  • 绝对!想想网络通信处理代码.它正在分配和释放大量内存,因此GC每运行几分钟就可能需要几秒钟才能完成.如果下游的某些内容实时依赖于该数据,则这是不可接受的.另一个示例是资源受限设备,例如移动设备,运行实时应用,例如行车路线应用. (4认同)

lin*_*ize 19

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

属性名称为Item1,Item2,Item3 ...,在某些情况下或没有文档可能没有意义.

元组类具有强类型泛型参数.仍然可以从通用参数的类型推断出Tuple类的用户.

  • 那么也许C#7应该能够更容易地动态创建类/对象而不是这个元组的东西? (2认同)