元組 概念:
1.使方法 可以返回多個返回值 而不需要借助 out ref 關(guān)鍵字。
2.使方法 可以返回多個返回值 而不需要借助 out ref 關(guān)鍵字,Tuple這個泛型類,可以允許我們返回多個參數(shù)恨旱。
1.基于 .Net4.0 框架的元組-Tuple:
創(chuàng)建一個元組 Tuple:
?1.? Tuple<string> test3 = new Tuple<string>("2");
2.? Tuple<string> test4 = Tuple.Create<string>("3");
3.?? Tuple<int, int, int, int, int, int, int, Tuple<int>> test3 = new Tuple<int, int, int, int, int, int, int, Tuple<int>>(1, 2, 3, 4, 5, 6, 7, new Tuple<int>(8));
示例1:
public static Tuple<string, string, string> GetFullName() => new Tuple<string, string, string>("first", "second", "third");
public static void OldTuple()
{
? ??????var fullName = GetFullName();
? ? ? ??Console.WriteLine(fullName.Item1);
? ? ? ? Console.WriteLine(fullName.Item2);
????????Console.WriteLine(fullName.Item3);
}
如此為一個元組 Tuple痕慢,由?fullName 接收來自GetFullName()函數(shù)所返回的值冈在,而這個返回值為Tuple<string, string, string>類型(泛型)
上方代碼 將獲得到的打印數(shù)據(jù)為 “first”瓷产、“second”比规、“third”。
優(yōu)點:此等 Tuple 可以不借助于 ref 和 out 參數(shù)從而返回出多個 多類型的數(shù)據(jù)拦英,這些數(shù)據(jù)被保存在一個元組中方便調(diào)用
缺點:由 Tuple 返回出的數(shù)據(jù)顯示方式單一 為上方所示的 以 Item1 2 3 作為Tuple中的數(shù)據(jù)下標(biāo)(只能這種方式取用)
示例2:
public static Tuple<int,string,int> ReturnOldTuple()
{
? ?????? int id = 6;
? ?????? string name = "王";
? ?????? int num = 50;
? ? ? ? ?return Tuple.Create(id, name, num); //創(chuàng)建返回對象 Tuple
}
public static void OldTuple()
{
? ??????Tuple<int,string,int> tuple = ReturnOldTuple();
? ?????? Console.WriteLine(tuple.Item1);
? ?????? Console.WriteLine(tuple.Item2);
? ?????? Console.WriteLine(tuple.Item3);
}
如此示例 打印獲得參數(shù)為6蜒什、王、50疤估, 可返回多個不同類型的數(shù)據(jù)灾常。
接收方式與上例不同,此次創(chuàng)建了一個新的 Tuple 類型對象用來接受 ReturnOldTuple() 函數(shù)中所返回的數(shù)據(jù)铃拇。 兩種方式 都可 任選其一钞瀑。
2.C#新特性ValueTuple 新元組
創(chuàng)建一個ValueTuple:
1. ValueTuple<int> test = new ValueTuple<int>();
2.? ValueTuple<int,string> test2 = ValueTuple.Create(2,"5");
3.在函數(shù)中可快速創(chuàng)建并返回 return(int ,string慷荔,double); 如 示例 2 中所示
示例1:
static (string First, string Second, string Third) GetFullNum() => ("first", "second", "third");
public static void NewValueTuple()
{
? ??????var fullnum = GetFullNum();
? ?????? Console.WriteLine(fullnum.First);
? ?????? Console.WriteLine(fullnum.Second);
? ?????? Console.WriteLine(fullnum.Third);
}
如此 打印獲得結(jié)果為:first雕什、second、third显晶。 可以看到在編寫中已經(jīng)去除了 Item 1 2 3 從而改為返回值中的元素名稱贷岸。
示例2:
public static (int id, string name, int num) ReturnNewValueTupleTwo()
{
? ?????? int id = 6;
????????string name = "王";
? ?????? int num = 50;
????????return (id, name, num);
? ? ? ? //return ValueTuple<int, string, int>(id, name, num); 方法二
? ??????//return ValueTuple.Create(id, name, num); 方法三
}
public static void NewValueTuple()
{
? ?????? (int id, string name, int num) valueTupleTwo = ReturnNewValueTupleTwo(); //應(yīng)該使用這種方法聲明的變量接受
? ??????//var valueTupleTwo = ReturnNewValueTupleTwo(); 方法二
????????Console.WriteLine(valueTupleTwo.id);
? ??????Console.WriteLine(valueTupleTwo.name);
? ?????? Console.WriteLine(valueTupleTwo.num);
}
如上 為第二種返回ValueTaple的方法,將獲得返回值:6磷雇、王偿警、50. 也可通過 .名稱?的方式獲得值。
上方案例種 通過三種方法返回ValueTuple 用兩種方法接受ValueTuple值唯笙。