我需要一些像
谢谢。
List<int , int , int ,string , int >
这样的数据类型。当然我可以自己实现,但是在 .net 3.5 中有没有类似的内置类型呢?谢谢。
不,.NET 3.5 中没有任何东西。但是与其使用 Tuple
,您考虑实现自己的简单类型来封装您需要的成员吗?通常,这比使用 Tuple
更易于阅读代码 - 特别是当您有很多成员时,其中大多数具有相同的类型。
这样更容易理解:
foo(sale.AdultTickets, sale.ChildTickets, ...);
thanfoo(sale.Item1, sale.Item2, ...);
多做了一点功夫,但不需要做得非常多。
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;
}
}
我在Jon Skeet和Tomas Petricek的《实用函数式编程》中看到了一个简单的C#元组实现。直到v4,都没有提供实现。
代码可以在http://archive.msdn.microsoft.com/realworldfp/Release/ProjectReleases.aspx?ReleaseId=3674下载。
您可以从 F# 发行版中拖出 Tuple。从 http://msdn.microsoft.com/en-us/library/ee829875(VS.100).aspx 下载可再发行包;在您的 C# 项目中引用 FSharp.Core,然后:
namespace FSharpTest
{
class Program
{
static void Main(string[] args)
{
System.Tuple<string> aTuple;
}
}
}
据我所知,3.5版本不支持元组。
很抱歉,没有这个功能。虽然有 KeyValuePair 可以用于元组,但没有内置的三元组、四元组等。
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;
}
}
System
库2.0/3.5中,您可以在哪里找到Tuple<>
? - Firo