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