11

我正在考虑为列表的每个对象保留三条信息。所以我可以为这三个信息创建一个具有三个属性的类,然后创建一个该类类型的集合......但我想知道在 .NET 3.5(而不是 4.0)中有什么内置的东西吗?例如一本字典……为每个项目保留两条信息,键和值……但我需要三个。我们有什么内置的吗?

4

5 回答 5

18

您可以创建自己的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 );
    }
}
于 2012-08-19T00:10:02.063 回答
13

创建您自己的 Triple 类:

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>>和其他类似的方法。

于 2012-08-19T00:03:14.623 回答
3

创建类似于.Net 4中添加的通用元组类的解决方案在其他答案中进行了解释,但我认为重要的是要说明创建一个小类来语义表示数据可能更好存储有意义的属性。通用的 3 元组现在可能可以工作,但您可能希望稍后扩展该功能。

于 2012-08-19T00:07:34.250 回答
2

如果您使用的是 .NET 4,那么您会寻找Tuple<T1,T2,T3>. .NET 3.5 没有内置类型,但根据您的需要,您可以执行Dictionary<T1,Dictionary<T2,Dictionary<T3,bool>>>

于 2012-08-18T23:59:37.727 回答
1

尝试Dictionary<Key, Tuple<Object, Object>>,或者,Dictionary<Key, YourClass>YourClass(当然可以是一个结构)保存两个必需的数据。

于 2012-08-19T00:01:17.800 回答