元组和列表的不同属性;
- 元组是异构的,列表是同质的,
- 元组是不可变的,而列表是可变的,
经常规定使用一种类型而不是另一种类型。然而,在其他情况下,任何一种数据类型都可能同样适用。因此,元组与列表的内存和/或性能影响是什么,也可能指导我们的决定?
谢谢,
好吧,除了您提到的之外,还有一个相当显着的区别,即一个元组最多只能包含八个项目。(好吧,从技术上讲,您可以通过将最后一个元组参数类型化为另一个元组来创建任意大的元组,但我不禁觉得您必须有点疯狂才能真正做到这一点。)
与 Python 等语言中的元组不同,C# 中的元组不能真正用作通用数据结构。C# 中元组最常见的用例之一是从一个函数返回多个值,或者将多个值传递给由于某些原因只能取一个的函数(例如,当传递e.Argument
给 a时BackgroundWorker
),或者您可以的任何其他情况不用费心制作自定义类,也不能使用匿名类型。
由于您需要在编译时确切地知道它们将包含多少项(以及哪些类型的项),所以元组的用途确实非常有限。另一方面,列表用于同类数据的通用存储,您不一定知道您将拥有多少项目。我很想看到一段代码的示例,正如您所说,“任何一种数据类型都可能同样合适”。
此外,由于元组和列表解决了完全不同的问题,因此比较内存/性能影响的兴趣可能相当有限。但值得一提的是,元组是作为类实现的,而不是作为结构实现的,因此它们像列表一样存储在堆中,并且在函数之间传递它们时不会复制它们,这与值类型不同。然而,它们确实实现了IStructuralEquatable
和IStructuralComparable
接口,并且它们的Equals
方法被实现为返回 true:(new Tuple<int>(1).Equals(new Tuple<int>(1))
同时new List<int>() { 1 }.Equals(new List<int>() { 1 })
为 false)。