.net - 什么时候使用 Tuple 和 KeyValuePair 更好?

标签 .net semantics

我通常使用KeyValuePair<TKey,TValue>每当我有成对相关的数据时,就键入一个数据,即一个数据是另一个数据的关键。如果数据不相关,则 Tuple<T1,T2> type 更有意义,我会同意。

现在我刚刚读了this article关于为什么通常要避免KeyValuePair<TKey,TValue>并更喜欢 Tuple<T1,T2> 。主要论点是 Tuple<T1,T2> 的性能优势.

除了性能之外,KVP 是否比 Tuple<T1,T2> 更好? ?

最佳答案

首先,该类型可能被认为命名不当。命名的 KeyValuePair 应表示一个键和一个值。如果您的两个对象实际上并不是键和值,而只是两个东西怎么办?如果我看到一个类型为 KeyValuePair<TKey, TValue> 的方法或属性,我希望 KVP 的值是一个键和一个值。这实际上只是沟通意图并在将来向自己或其他团队成员明确说明的问题。元组并不表示这种关联。

元组还可以更轻松地添加另一个值,使其成为 3 元组(或三元组,无论您如何调用它)。某些 .NET 语言,例如 F#、have special syntax也围绕元组。

从实现角度来看,Tuple做很多事情KeyValuePair才不是。元组是可比较的,它们实现 IComparableIStructuralEquatable接口(interface),因此可以更轻松地比较两个元组。

关于.net - 什么时候使用 Tuple 和 KeyValuePair 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19522422/

相关文章:

.net - 如果不是 IsDefaultAppDomain,则从任何 AppDomain 调用的 Environment.Exit 是否会退出整个过程?

c# - 无法通过通用名称从 C# 中的存储中获取证书

.net - PowerShell 运行空间与 DLR

c# - .Net5 身份注销

html - 我应该在 <aside> 中使用 <section> 标签吗?

c# - 基于运行时类型而非编译时类型的调用方法

C# 使用 String.IsNullOrEmpty 切换

algorithm - 是否存在一种算法来帮助检测英语句子的 "primary topic"?

swift - Swift 中的计算只读属性与函数

java - 如何在耶拿将一个RDF模型分成两个模型?