Tuple(组元)是C# 4.0引入的一个新特性,编写的时候需要基于.NET Framework 4.0或者更高版本。
在以前编程中,当需要返回多个值得方法中,常常需要将这些值放置到一个结构体或者对象中进行返回,当然也有以out/ref参数进行传递的。但是总的来说并不能真正的符合编程的需要。从而引入Tuple。
Tuple的简单使用:
private Tuple<bool, object, string> GetObject() { bool result=false; object obj=null; string message=string.Empty; try { //TODO相应的操作(例如查询获取对象)给obj赋值 obj=Query(); message="查询成功"; result=true; } catch(Exception ex) { message="查询失败";//对异常进行处理,而不是返回ex.ToString()或者ex.Message } return new Tuple<bool, object, string>(result, obj, message); }
但是当程序需要转到.net 4.0之下时就不能使用Tuple了。不过觉得这个Tuple比较实用。所以自己动手写了一个,才发现其实这个还是比较简单的。
1 #region 自定义数据结构体 一般用于数据返回处理 2 public class TupleBase<T> 3 { 4 private readonly T item1 = default(T); 5 public T Item1 6 { 7 get { return item1; } 8 } 9 public TupleBase(T t) 10 { 11 item1 = t; 12 } 13 } 14 15 16 public class TupleBase<T1, T2> : Tuple<T1> 17 { 18 private readonly T2 item2 = default(T2); 19 public T2 Item2 20 { 21 get { return item2; } 22 } 23 public TupleBase(T1 t1, T2 t2) 24 : base(t1) 25 { 26 this.item2 = t2; 27 } 28 } 29 public class TupleBase<T1, T2, T3> : TupleBase<T1, T2> 30 { 31 private readonly T3 item3 = default(T3); 32 public T3 Item3 33 { 34 get { return item3; } 35 } 36 public TupleBase(T1 t1, T2 t2, T3 t3) 37 : base(t1, t2) 38 { 39 this.item3 = t3; 40 } 41 } 42 43 public class TupleBase<T1, T2, T3, T4> : TupleBase<T1, T2, T3> 44 { 45 private readonly T4 item4 = default(T4); 46 public T4 Item4 47 { 48 get { return item4; } 49 } 50 public TupleBase(T1 t1, T2 t2, T3 t3, T4 t4) 51 : base(t1, t2, t3) 52 { 53 this.item4 = t4; 54 } 55 } 56 public class TupleBase<T1, T2, T3, T4, T5> : TupleBase<T1, T2, T3, T4> 57 { 58 private readonly T5 item5 = default(T5); 59 public T5 Item5 60 { 61 get { return item5; } 62 } 63 public TupleBase(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) 64 : base(t1, t2, t3, t4) 65 { 66 this.item5 = t5; 67 } 68 } 69 #endregion
以上只是以对象的形式建立,当然也有的说以结构体的形式进行组装Tuple的。结构体是值类型的,而且其没有继承,我对这个还是没有太大想法。