組み込みクラス
特定のケースでは、.net フレームワークは、利用できるタプルのようなクラスを既に提供しています。
ペアとトリプル
汎用の
System.Collections.Generic.KeyValuePair
クラスは、アドホック ペアの実装として使用できます。これは、汎用 Dictionary が内部で使用するクラスです。
または、
初歩的なペアとして機能し、mscorlib で利用できるという利点を持つSystem.Collections.DictionaryEntry構造体を使用することもできます。ただし、欠点は、この構造が厳密に型指定されていないことです。
ペアとトリプルは、 System.Web.UI.Pairおよび
System.Web.UI.Tripletクラスの形式でも使用できます
。これらのクラスはSystem.Webアセンブリに存在しますが、winforms 開発には完全に適している可能性があります。ただし、これらのクラスは厳密に型指定されているわけでもなく、汎用のフレームワークやライブラリなど、一部のシナリオには適さない場合があります。
高階タプル
高次のタプルの場合、独自のクラスをローリングしないと、簡単な解決策がない場合があります。
F# 言語をインストールしている場合は
、汎用の不変の
Microsoft.Fsharp.Core.Tupleクラスから汎用の 6 組までのセットを含むFSharp.Core.dllを参照できます。ただし、変更されていない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; }
}
}
フレームワークとライブラリ
この問題は以前に対処されており、汎用フレームワークが存在します。以下は、そのようなフレームワークの 1 つへのリンクです。