我需要一些像List<int , int , int ,string , int >
这样的数据类型。
当然我可以实现,但是内置了.net 3.5。
谢谢。
答案 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;
}
}