内置类
在某些特定情况下,.net 框架已经提供了您可以利用的类似元组的类。
对子和三人组
通用
System.Collections.Generic.KeyValuePair
类可用作临时对实现。这是通用 Dictionary 内部使用的类。
或者,您可以使用
System.Collections.DictionaryEntry
结构,该结构充当基本对并且具有在 mscorlib 中可用的优势。然而,不利的一面是这种结构不是强类型的。
Pairs 和 Triples 也以
System.Web.UI.Pair和
System.Web.UI.Triplet类的形式提供。尽管这些类存在于System.Web程序集中,但它们可能非常适合 winforms 开发。但是,这些类也不是强类型的,并且可能不适合某些场景,例如通用框架或库。
高阶元组
对于高阶元组,除了滚动您自己的类之外,可能没有简单的解决方案。
如果您已安装
F# 语言,则可以引用 FSharp.Core.dll,其中包含一组通用不可变
Microsoft.Fsharp.Core.Tuple类,直至通用六元组。但是,即使可以重新分发未修改的FSharp.Code.dll
,F# 也是一种研究语言,并且还在进行中,因此该解决方案可能仅在学术界感兴趣。
如果您不想创建自己的类并且不喜欢引用 F# 库,那么一个巧妙的技巧可能是扩展通用 KeyValuePair 类,以便 Value 成员本身就是一个嵌套的 KeyValuePair。
例如,以下代码说明了如何利用 KeyValuePair 来创建三元组:
int id = 33;
string description = "This is a custom solution";
DateTime created = DateTime.Now;
KeyValuePair<int, KeyValuePair<string, DateTime>> triple =
new KeyValuePair<int, KeyValuePair<string, DateTime>>();
triple.Key = id;
triple.Value.Key = description;
triple.Value.Value = created;
这允许根据需要将类扩展到任意级别。
KeyValuePair<KeyValuePair<KeyValuePair<string, string>, string>, string> quadruple =
new KeyValuePair<KeyValuePair<KeyValuePair<string, string>, string>, string>();
KeyValuePair<KeyValuePair<KeyValuePair<KeyValuePair<string, string>, string>, string>, string> quintuple =
new KeyValuePair<KeyValuePair<KeyValuePair<KeyValuePair<string, string>, string>, string>, string>();
自己动手
在其他情况下,您可能需要求助于滚动您自己的元组类,这并不难。
您可以像这样创建简单的结构:
struct Pair<T, R>
{
private T first_;
private R second_;
public T First
{
get { return first_; }
set { first_ = value; }
}
public R Second
{
get { return second_; }
set { second_ = value; }
}
}
框架和库
这个问题之前已经解决过,并且确实存在通用框架。下面是一个这样的框架的链接: