淺談Tuple之C#4.0新特性那些事兒你還記得多少?


來源:微信公眾號CodeL

今天給大家分享的內容基於前幾天收到的一條留言信息,留言內容是這樣的:

 

 看了這位網友的留言相信有不少剛接觸開發的童鞋們也會有同樣的困惑,除了用新建類作為橋梁之外還有什么好的辦法?很多童鞋肯定會想到DataSet,不錯,DataSet完全可以實現各種數據集的傳遞,而且還很方便,但是一般我們更推薦使用List集合,那么List集合如何在不確定屬性和類的時候傳遞包含多個字段的集合呢?為一些簡單的結構而新建一個類顯然是不合理的。

一、4.0新特性中的Tuple

大家可以回顧一下c#4.0中增加的一個新特性,元組Tuple,它是一種固定成員的泛型集合:


下面先看看官方的一個使用例子:

創建一個包含7個元素的Tuple數組

// Create a 7-tuple.

var population = new Tuple<string, int, int, int, int, int, int>( "New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278);// Display the first and last elements.

Console.WriteLine("Population of {0} in 2000: {1:N0}",population.Item1, population.Item7);

用法非常簡單方便,普通的方式我們可能需要這樣:

public class A{ 

 public int ID{get;set;} 

 public string Name{get;set;}

}

A a=new A(){ID=1001,Name='CodeL'};

Console.WriteLine(a.Name);


而使用Tuple我們只需要這樣:

Tuple<int,string> a=new Tuple<int,string>(1001,'CodeL');

Console.WriteLine(a.Item2);//Item1 代表第一個,Item2代表第二個


這樣我們就可以不用為了 一些簡單的結構或對象而去新建一個類了。
注意的是tuple最多支持8個成員,注意第8個成員很特殊,如果有8個成員,第8個必須是嵌套的tuple類型。

列如:Tuple<string, int, int, int, int, int, int, Tuple<int, int, int>>  紅色部分是第8個。

第8個元素使用方法:對象.Rest.Item1,對象.Rest.Item2

 

二、實際場景舉例

我們使用Tuple來完成一次簡單數據集的傳遞工作。

將Tuple作為返回值

public List<Tuple<int,string,DateTime>> GetUsers(){ 

  string sql="select ID,Name,CreateTime from Tbl_Users";

using (SqlDataReader r = SqlHelper.ExecuteReader(Connections.AdminDBConString, CommandType.Text, sql))   

 {             

        List<Tuple<int,string,DateTime>> list = new List<Tuple<int,string,DateTime>>(); 

              while (r.Read()) 

              { 

                  Tuple<int,string,DateTime> t = new Tuple<int,string,DateTime>(Convert.ToInt32(r[0]),r[1].ToString(),Convert.ToDatetime(r[2])); 

                  list.Add(t);

                } 

              return list; 

          }

}

使用也非常方便:

List<Tuple<int,string,datetime>> list=GetUsers();

foreach(Tuple<int,string,datetime> t in list)

 Console.write(t.Item1);//ID 

 Console.write(t.Item2);//Name

   Console.write(t.Item3);//CreateTime

}

到這里大家是不是明白了,上面那位童鞋的問題原來可以這么解決。

個人建議一些簡單的結構下可以這么使用,過於復雜的對象結構由於Tuple本身的一些限制(如:最多支持8項內容,超過的需要使用TRest)而操作復雜,我在實際開發中使用Tuple最多嵌套過一層Tuple。

大家在平時的工作學習中可以多多了解更多常用的基本知識,很多看起來不起眼的小東西將會在開發過程中起到非常大的作用。

相關資源獲取或其他疑問可在公眾號留言。如果你有優秀的原創技術類文章也可以投稿分享給大家賺取賞金喲!

微信掃一掃獲取更多開發資源:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM