【C#】Tuple 用法

Tuple 是個資料集,且每個 Item 可以是不同的資料型態。
我覺得它就是 class 的偷吃步阿!
像我這種有 class 命名障礙的人簡直是一大福音,如果使用的地方很少,一時之間也想不到合適的集合名稱,就是使用 Tuple 的時候啦!
我最常使用 Tuple 的情境為

  • 方法回傳多個值,以 Tuple 取代 ref、out
  • 傳遞多個參數至方法,改成傳 Tuple
  • 欲建立的 class property 很少且有 class 命名障礙時

使用方法:

建立 Tuple & 取值

//建立Tuple
//方法一:使用Tuple建構子
var authorInfo = new Tuple<string, DateTime>("AMA", new DateTime(2022, 1, 1));

//方法二:使用Create方法
var authorInfo = Tuple.Create("AMA", new DateTime(2022,1,1));

//取Tuple值
Console.Write(authorInfo.Item1);//AMA
Console.Write(authorInfo.Item2);//2022/01/01

Tuple 提供的多載如下

  • Tuple<T1>
  • Tuple<T1,T2>
  • Tuple<T1,T2,T3>
  • Tuple<T1,T2,T3,T4>
  • Tuple<T1,T2,T3,T4,T5>
  • Tuple<T1,T2,T3,T4,T5,T6>
  • Tuple<T1,T2,T3,T4,T5,T6,T7>
  • Tuple<T1,T2,T3,T4,T5,T6,T7,TRest>

比較特別的是超過第七個 Item 要用巢狀 Tuple

//建立Tuple
//方法一:使用Tuple建構子
var info = new Tuple<int, int, int, int, int, int, int, Tuple<int>>(1, 2, 3, 4, 5, 6, 7, new Tuple<int>(8));

//方法二:使用Create方法
var info = Tuple.Create(1, 2,3,4,5,6,7,Tuple.Create(8));

//第8個用Rest取值
Console.WriteLine(info.Item1);//1
Console.WriteLine(info.Item2);//2
Console.WriteLine(info.Item3);//3
Console.WriteLine(info.Item4);//4
Console.WriteLine(info.Item5);//5
Console.WriteLine(info.Item6);//6
Console.WriteLine(info.Item7);//7
Console.WriteLine(info.Rest.Item1);//8

要注意 Tuple 的 Item 是唯讀的(沒有 setter),建立之後無法再更改值。

var authorInfo = Tuple.Create("AMA", new DateTime(2022, 1, 1));
authorInfo.Item1 = "FakeAMA";//這樣是錯誤的

參考資料:
https://learn.microsoft.com/zh-tw/dotnet/api/system.tuple?view=net-7.0

分類: C#

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *