C# Tuple
2023-01-21
筆記如何使用 C# Tuple 管理物件資料。
說明
C# 的 Tuple 有兩種,一種是在 C# 4.0 出現的 System.Tuple
;另一種則是在 C# 7.0 所出現的 System.ValueTuple
。
項目 | System.Tuple |
System.ValueTuple |
---|---|---|
Type | Reference Type | Value Type |
Mutable | 不可變 (immutable) | 可變的 (mutable) |
Class Data | Property | Field |
Tuple
var tp = new Tuple<string, int>("Hello", 1024);
Console.WriteLine($"{tp.Item1} {tp.Item2}");
var tp2 = Tuple.Create("Hello", 1024);
Console.WriteLine($"{tp2.Item1} {tp2.Item2}");
因為 Tuple 是 immutable,因此無法改變 Item 的值。
vtp.Item1 = "Hello World"; // ❌
Value Tuple
(string, string) vtp = ("Hello", 1024);
Console.WriteLine($"{vtp.Item1}, {vtp.Item2}");
Value Tuple 是 mutable,所以可以改變 Item 的值。
vtp.Item1 = "Hello World"; // ✔️
另可以指定 Value Tuple Property 名稱的使用方式,用起來很像 Python 的 Named Tuple,但 C# 寫法上更為簡便 (C# ❤️)
var vtp2 = (greeting: "Hello", versions: 1024);
Console.WriteLine($"{vtp2.greeting}, {vtp2.versions}");
TupleExtensions
如果想要將 Value Tuple 以及 Tuple 互相轉換,可以使用 Static Class TupleExtensions
來進行。
var vtp = TupleExtensions.ToValueTuple(Tuple.Create("Hello", 1024, 0.31415926));
vtp.GetType();
// System.ValueTuple`3[System.String,System.Int32,System.Double]
var tp = TupleExtensions.ToTuple(("Hello", 1024, 0.31415926));
tp.GetType();
// System.Tuple`3[System.String,System.Int32,System.Double]
或者是直接在 Value Tuple 以及 Tuple 的物件上使用 Extension Methods。
參考資料
System.ValueTuple | learn.microsoft