我不了解元组和键值对之间的区别。我正在研究这篇文章 http://www.dotnetperls.com/tuple-keyvaluepair。似乎 tuple 比 keyvaluepair 更好,但是一些开发人员说严格不要使用 tuple 我想知道为什么?
4 回答
KeyValuePair<>
是一个表示键和值的结构。枚举字典时,项的类型KeyValuePair<>
与字典的泛型类型相同。
这些Tuple<>
类旨在表示多个值,但对于键或值等值没有特定的角色。不同数量的值有不同Tuple<>
的类,从 1 到 8 个值。
这些Tuple<>
类具有项目的名称,如、Item1
等。由于这些名称没有告诉您有关项目代表什么的任何信息,因此您最好只使用含义明显的元组,例如一年中的季度。Item2
Item3
有相当多的人称自己为开发人员,这不应该。话说回来。您发布的链接详细介绍了差异以及何时应该使用它们。最后,它取决于您正在构建的应用程序。
引用自您链接的网站...
我建议完全避免使用 KeyValuePair 并使用 Tuple 或自定义类(在性能上类似于 Tuple)。
和
除了分配性能外,Tuple 在每个测试中都比 KeyValuePair 快。因此,如果您的程序除了分配集合之外还有其他工作,那么最好使用 Tuple 而不是 KeyValuePair。
说明我想要表达的观点。
对于开发人员可以使用的大型工具集,当人们告诉我永远不要使用通常是我不再关心他们的意见时。没有人应该告诉您使用什么而不了解它将要获得的使用类型的上下文。
我认为那些程序员说不要使用元组,因为在公共 API 上,它们的效率较低。
假设你有一个像
Tuple<int,string,string,int>
那么你将如何识别这些值是什么或者它们代表什么。我认为这就是程序员这么说的原因。就像在这种情况下,消费者必须猜测或查找文档才能知道您的意思。
MSDN 说:
元组是具有特定数量和元素序列的数据结构。
元组通常以四种方式使用:
- 表示一组数据。例如,一个元组可以表示一个数据库记录,它的组件可以表示记录的各个字段。
- 提供对数据集的轻松访问和操作。
- 在不使用 out 参数(在 C# 中)或 ByRef 参数(在 Visual Basic 中)的情况下从方法返回多个值。
- 通过单个参数将多个值传递给方法。例如,Thread.Start(Object) 方法有一个参数,可让您为线程在启动时执行的方法提供一个值。如果您提供一个 Tuple 对象作为方法参数,您可以为线程的启动例程提供三项数据。
他们说不要使用元组,因为元组的属性没有有意义的名称:Item1、Item2 等。在某些情况下使用它们是完全可以的。使用元组肯定比每次都创建自己的要少。
一个显着的区别是 KeyValuePair 是一个结构体,而元组是类。KeyValuePair 与元组无关,真的。它存在于元组之前,用于在字典中存储键和值。
您可能会争论元组是否应该被实现为值类型。你用得最多的是类型参数很少的那些,它们作为值类型会更好。(您自己轻松实现它们)查看此处了解他们做出某些决定的原因:http: //msdn.microsoft.com/en-us/magazine/dd942829.aspx#id0400060