今天給大家分享的內容基於前幾天收到的一條留言信息,留言內容是這樣的:看了這位網友的留言相信有不少剛接觸開發的童鞋們也會有同樣的困惑,除了用新建類作為橋梁之外還有什麼好的辦法?很多童鞋肯定會想到DataSet,不錯,DataSet完全可以實現各種數據集的傳遞,而且還很方便,但是一般我們更推薦使用Lis...
今天給大家分享的內容基於前幾天收到的一條留言信息,留言內容是這樣的:
看了這位網友的留言相信有不少剛接觸開發的童鞋們也會有同樣的困惑,除了用新建類作為橋梁之外還有什麼好的辦法?很多童鞋肯定會想到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。
大家在平時的工作學習中可以多多瞭解更多常用的基本知識,很多看起來不起眼的小東西將會在開發過程中起到非常大的作用。
相關資源獲取或其他疑問可在公眾號留言。如果你有優秀的原創技術類文章也可以投稿分享給大家賺取賞金喲!
微信掃一掃獲取更多開發資源: