Tuple

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的。结构体是值类型的,而且其没有继承,我对这个还是没有太大想法。

 

posted @ 2015-03-17 23:16  Tim_et  阅读(262)  评论(0编辑  收藏  举报