.net中的元组(T1)/ Singleton的目的是什么?

Mic*_*tum 32 .net tuples

.net 4中的元组类型之一是单元素元组.我只是想知道这个结构的目的是什么?

我看到的唯一用途是在8+元组中使用,因为它可以分配给TRest,它实际上是有意义的.是吗?或者还有其他目的吗?

LBu*_*kin 18

您必须要求BCL设计人员确定,但我怀疑由于现实世界中存在1元组,因此.NET框架作者希望在其实现中提供等效的对称性.

Tuples是你认为元组数学概念的.NET实现.

既然你要求编程用途Tuple<T>,我也会回答有一些.NET语言(比如F#)可以Tuple<>用来代表函数的返回值.因为F#函数当然可以返回1元组 - 它增加了语言的行为和感觉的对称性和一致性.

你的8+元组的例子也可能是合法的,因为Rest属性可能是一个代表"溢出"的1元组.

  • 我认为实际上不可能在惯用的F#中构造一个1元组,因为逗号运算符是用该语言创建元组的.`let foo = 3,5`是包含3和5的2元组的定义,但我认为在F#中创建1元组的唯一方法与在C#中执行它的方式相同: `new System.Tuple <int>(5)` (3认同)
  • 或者`Tuple.Create`当然.尽管如此,据我所知,1元组是F#唯一没有提供任何语法糖的类型. (2认同)
  • @LBushkin嗨,您有没有见过使用1元组的实际F#/ C#代码?我对现实世界的用例感到好奇. (2认同)

Ben*_*ack 7

元组自动执行IStructuralComparableIStructuralEquatable,等等.这样可以直接比较和排序元组.来自Bill McCarthy的2009年12月版Visual Studio Magazine的文章".NET 4中的类型和元组":

尽管元组可能看起来简单且不起眼,但它们确实提供了强类型和重要的比较和相等功能.元组在方法,类甚至机器边界上都很有用.

通过将您的数据类型放入元组中,即使只有一个元素,您也可以保证不变性,可公性和可比性.对于仅由一个元素组成的元组,使用元组的主要好处是不可变性:一旦创建了元组,它的数据就不会在元组的生命周期中发生变化.

  • 我没有看到如何实现不变性,可公性和可比性.如果将可变数据放入元组中,您仍然可以改变该数据.类似性和可比性相似......如何将数据放入元组中添加任何(有意义的)可比性? (6认同)