在.net 3.5中是否有类似元组的东西

时间:2011-09-19 10:45:36

标签: c# .net list generics

我需要一些像List<int , int , int ,string , int >这样的数据类型。 当然我可以实现,但是内置了.net 3.5。

谢谢。

8 个答案:

答案 0 :(得分:15)

不,.NET 3.5中没有任何内容。但是,您是否考虑过实现您自己的简单类型而不是Tuple,而这种类型封装了您需要的成员?通常最终会提供比Tuple更可读的代码 - 特别是当你有相当多的成员时,其中大多数都有相同的类型。

理解起来要容易得多:

foo(sale.AdultTickets, sale.ChildTickets, ...);

大于

foo(sale.Item1, sale.Item2, ...);

这是一项更多的工作,但它不需要

答案 1 :(得分:3)

我在Jon Skeet和Tomas Petricek的Real World Functional Programming中看到了一个简单的Tuple实现。直到v4,没有提供实施。

可以在http://archive.msdn.microsoft.com/realworldfp/Release/ProjectReleases.aspx?ReleaseId=3674

下载代码

答案 2 :(得分:3)

我实现了自己的:

public class Tuple<T1, T2, T3, T4, T5>
{
    public T1 Item1 { get; set; }
    public T2 Item2 { get; set; }
    public T3 Item3 { get; set; }
    public T4 Item4 { get; set; }
    public T5 Item5 { get; set; }

    public Tuple(T1 Item1, T2 Item2, T3 Item3, T4 Item4, T5 Item5)
    {
        this.Item1 = Item1;
        this.Item2 = Item2;
        this.Item3 = Item3;
        this.Item4 = Item4;
        this.Item5 = Item5;
    }
}

答案 3 :(得分:1)

您可以将Tuple拖出F#发行版。从http://msdn.microsoft.com/en-us/library/ee829875(VS.100).aspx下载Redistributable软件包;在你的C#projcet中引用FSharp.Core然后:

namespace FSharpTest
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Tuple<string> aTuple;
        }
    }
}

答案 4 :(得分:0)

AFAIK 3.5不支持元组。

答案 5 :(得分:0)

恐怕没有。有元组的KeyValuePair,但没有内置的三元组,四元组等。

答案 6 :(得分:0)

不是本身,而是Tuple&lt;&gt;的实现。对于所有“过载”而言,泛型类并不太难,尽管很麻烦。

有一个project on codeplex,但我不知道它有多成熟。

答案 7 :(得分:-2)

您可以使用我的实现:)

public class Tuple
{
    public static Tuple<T1> Create<T1>(T1 t1)
    {
        return new Tuple<T1>(t1);
    }

    public static Tuple<T1, T2> Create<T1, T2>(T1 t1, T2 t2)
    {
        return new Tuple<T1, T2>(t1, t2);
    }

    public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 t1, T2 t2, T3 t3)
    {
        return new Tuple<T1, T2, T3>(t1, t2, t3);
    }

    static Tuple<T1, T2, T3, T4> Create<T1, T2, T3, T4>(T1 t1, T2 t2, T3 t3, T4 t4)
    {
        return new Tuple<T1, T2, T3, T4>(t1, t2, t3, t4);
    }

    static Tuple<T1, T2, T3, T4, T5> Create<T1, T2, T3, T4, T5>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
    {
        return new Tuple<T1, T2, T3, T4, T5>(t1, t2, t3, t4, t5);
    }

    static Tuple<T1, T2, T3, T4, T5, T6> Create<T1, T2, T3, T4, T5, T6>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
    {
        return new Tuple<T1, T2, T3, T4, T5, T6>(t1, t2, t3, t4, t5, t6);
    }

    static Tuple<T1, T2, T3, T4, T5, T6, T7> Create<T1, T2, T3, T4, T5, T6, T7>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
    {
        return new Tuple<T1, T2, T3, T4, T5, T6, T7>(t1, t2, t3, t4, t5, t6, t7);
    }

    static Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> Create<T1, T2, T3, T4, T5, T6, T7, TRest>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, TRest Rest)
    {
        return new Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>(t1, t2, t3, t4, t5, t6, t7, Rest);
    }
}

public class Tuple<T1> : Tuple
{
    public T1 Item1 { get; set; }

    public Tuple(T1 Item1)
    {
        this.Item1 = Item1;
    }
}

public class Tuple<T1, T2>
{
    public T1 Item1 { get; set; }
    public T2 Item2 { get; set; }

    public Tuple(T1 Item1, T2 Item2)
    {
        this.Item1 = Item1;
        this.Item2 = Item2;
    }
}

public class Tuple<T1, T2, T3>
{
    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 class Tuple<T1, T2, T3, T4>
{
    public T1 Item1 { get; set; }
    public T2 Item2 { get; set; }
    public T3 Item3 { get; set; }
    public T4 Item4 { get; set; }

    public Tuple(T1 Item1, T2 Item2, T3 Item3, T4 Item4)
    {
        this.Item1 = Item1;
        this.Item2 = Item2;
        this.Item3 = Item3;
        this.Item4 = Item4;
    }
}

public class Tuple<T1, T2, T3, T4, T5>
{
    public T1 Item1 { get; set; }
    public T2 Item2 { get; set; }
    public T3 Item3 { get; set; }
    public T4 Item4 { get; set; }
    public T5 Item5 { get; set; }

    public Tuple(T1 Item1, T2 Item2, T3 Item3, T4 Item4, T5 Item5)
    {
        this.Item1 = Item1;
        this.Item2 = Item2;
        this.Item3 = Item3;
        this.Item4 = Item4;
        this.Item5 = Item5;
    }
}

public class Tuple<T1, T2, T3, T4, T5, T6>
{
    public T1 Item1 { get; set; }
    public T2 Item2 { get; set; }
    public T3 Item3 { get; set; }
    public T4 Item4 { get; set; }
    public T5 Item5 { get; set; }
    public T6 Item6 { get; set; }

    public Tuple(T1 Item1, T2 Item2, T3 Item3, T4 Item4, T5 Item5, T6 Item6)
    {
        this.Item1 = Item1;
        this.Item2 = Item2;
        this.Item3 = Item3;
        this.Item4 = Item4;
        this.Item5 = Item5;
        this.Item6 = Item6;
    }
}

public class Tuple<T1, T2, T3, T4, T5, T6, T7>
{
    public T1 Item1 { get; set; }
    public T2 Item2 { get; set; }
    public T3 Item3 { get; set; }
    public T4 Item4 { get; set; }
    public T5 Item5 { get; set; }
    public T6 Item6 { get; set; }
    public T7 Item7 { get; set; }

    public Tuple(T1 Item1, T2 Item2, T3 Item3, T4 Item4, T5 Item5, T6 Item6, T7 Item7)
    {
        this.Item1 = Item1;
        this.Item2 = Item2;
        this.Item3 = Item3;
        this.Item4 = Item4;
        this.Item5 = Item5;
        this.Item6 = Item6;
        this.Item7 = Item7;
    }
}

public class Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>
{
    public T1 Item1 { get; set; }
    public T2 Item2 { get; set; }
    public T3 Item3 { get; set; }
    public T4 Item4 { get; set; }
    public T5 Item5 { get; set; }
    public T6 Item6 { get; set; }
    public T7 Item7 { get; set; }
    public TRest Rest { get; set; }

    public Tuple(T1 Item1, T2 Item2, T3 Item3, T4 Item4, T5 Item5, T6 Item6, T7 Item7, TRest Rest)
    {
        this.Item1 = Item1;
        this.Item2 = Item2;
        this.Item3 = Item3;
        this.Item4 = Item4;
        this.Item5 = Item5;
        this.Item6 = Item6;
        this.Item7 = Item7;
        this.Rest  = Rest;
    }
}