リストのオブジェクトごとに 3 つの情報を保持することを考えていました。したがって、これら 3 つの情報に対して 3 つのプロパティを持つクラスを作成し、そのクラス タイプの Collection を作成できます。たとえば、辞書では、キーと値の各項目について 2 つの情報が保持されますが、3 つ必要です。そのために組み込まれているものはありますか?
5 に答える
独自の を作成できますTuple<T1, T2, T3>
:
public class Tuple<T1, T2, T3> : IEquatable<Object>{
public T1 Item1{
get;
set;
}
public T2 Item2{
get;
set;
}
public T3 Item3{
get;
set;
}
public Tuple(T1 Item1, T2 Item2, T3 Item3){
this.Item1 = Item1;
this.Item2 = Item2;
this.Item3 = Item3;
}
public override bool Equals( object obj ) {
if ( obj == null || (obj as Tuple<T1, T2, T3>) == null ) //if the object is null or the cast fails
return false;
else {
Tuple<T1,T2,T3> tuple = ( Tuple<T1, T2, T3> ) obj;
return Item1.Equals( tuple.Item1 ) && Item2.Equals(tuple.Item2) && Item3.Equals(tuple.Item3);
}
}
public override int GetHashCode( ) {
return Item1.GetHashCode( ) ^ Item2.GetHashCode() ^ Item3.GetHashCode();
}
public static bool operator == ( Tuple<T1, T2, T3> tuple1, Tuple<T1, T2, T3> tuple2 ) {
return tuple1.Equals( tuple2 );
}
public static bool operator != ( Tuple<T1, T2, T3> tuple1, Tuple<T1, T2, T3> tuple2 ) {
return !tuple1.Equals( tuple2 );
}
}
独自のトリプル クラスを作成します。
public class Triple<T,X,Y>
{
public T t{get;set;}
public X x{get;set;}
public Y y{get;set;}
}
これは明確なアプローチであり、次のような辞書を直接使用するよりも管理しやすく、Dictionary<Key, KeyValuePair<X,Y>>
このような他のアプローチです。
.Net 4 に追加されたものと同様のジェネリック タプル クラスを作成するソリューションは、他の回答で説明されていますが、データを意味的に表現するために小さなクラスを作成する方が良いかもしれないと述べることが重要だと感じています意味のあるプロパティで保存します。現在は一般的な 3 タプルが機能するかもしれませんが、後で機能を拡張する必要があるかもしれません。
.NET 4 を使用していた場合は、Tuple<T1,T2,T3>
. .NET 3.5 には組み込みの型はありませんが、必要に応じて、Dictionary<T1,Dictionary<T2,Dictionary<T3,bool>>>
Dictionary<Key, Tuple<Object, Object>>
または、代わりに、 YourClass Dictionary<Key, YourClass>
(もちろん構造体でもかまいません) が必要な 2 つのデータを保持する場所を試してください。