C#元组与列表注意事项

时间:2013-09-03 11:34:27

标签: c# list tuples

元组和列表的不同属性;

  • 元组是异构的,列表是同质的,
  • 元组是不可变的,而列表是可变的,

经常要求使用一种类型而不是另一种类型。但是,在其他情况下,任何一种数据类型都可能同样合适。因此,元组与列表的记忆和/或性能影响是什么,也可能指导我们的决定? 谢谢,

1 个答案:

答案 0 :(得分:11)

嗯,除了你提到的内容之外,元组最多只能包含8个项目,这是一个相当大的区别。 (好吧,你可以技术上通过使最后一个元组参数类型为另一个元组来制作任意大的元组,但我不禁觉得你必须有点疯狂才能真正做到这一点。)

与Python之类的语言中的元组不同,C#中的元组不能真正用作通用数据结构。 C#中元组最常见的用例之一是从函数返回多个值,或者将多个值传递给函数,这些函数由于某些原因只能占用一个(例如,当将e.Argument传递给{{1}时}),或任何其他你不能打扰自定义类的情况,你不能使用匿名类型。

由于您需要确切知道它们在编译时将包含多少项(以及哪些类型的项),因此元组的使用确实非常有限。另一方面,列表用于同类数据的通用存储,其中您不一定知道您将拥有多少项。我很乐意看到一段代码的例子,正如你所说,“数据类型可能同样合适”。

此外,由于元组和列表解决了完全不同的问题,因此比较内存/性能影响的兴趣可能相当有限。但是对于它的价值,元组是作为类而不是结构实现的,因此它们就像列表一样存储在堆上,并且在函数之间传递它们时不会复制它们,这与值类型不同。但是,他们确实实现了BackgroundWorkerIStructuralEquatable接口,并且实现了他们的IStructuralComparable方法,使其返回true:Equals(同时,new Tuple<int>(1).Equals(new Tuple<int>(1))为false )。