星期二, 2月 28, 2023

[C#] Tuple

紀錄 Tuple 實務上常使用重點,Tuple 版本
  • C# 4.0 推出 Tuple 為 reference type
  • C# 7.0 推出 ValueTuple 為 value type
C# 4.0 Tuple 為人詬病在於名稱為 item1、item2,沒有辦法賦予有意義名稱,以往使用時為了方便辨識每個真正的意思,會在備註上說明,C# 7.0 ValueTuple 推出後解決名稱問題,並廣泛應用在 method 回傳多值情況
/// <summary>
/// Tuple 回傳值範例
/// item1:姓名
/// item2:年齡
/// item3:生日
/// </summary>
public Tuple<string, int, DateTime> TupleReturn()
{
    return Tuple.Create("張三", 10, new DateTime(2013, 2, 28));
}
宣告並指定名稱
/***** C# 4.0 Tuple *****/
// 使用 new 建立
Tuple<string, int, DateTime> person1 = new Tuple<string, int, DateTime>("張三", 10, new DateTime(2013, 2, 28));

// 使用內建靜態方法建立 
var perosn2 = Tuple.Create("張三", 10, new DateTime(2013, 2, 28));

/***** C# 7.0 ValueTuple *****/
// 方法一
(string name, int age, DateTime birthday) personWithName1 = ("張三", 10, new DateTime(2013, 2, 28));

// 方法二
var personWithName2 = (name: "張三", age: 10, birthday: new DateTime(2013, 2, 28));
回傳多值
// 傳統使用 out 回傳多值
public void ReturnMultiValue(out string name, out int age, out DateTime birthday)
{
    name = "張三";
    age = 10;
    birthday = new DateTime(2013, 2, 28);
}

// 使用 ValueTuple 回傳多值
public (string name , int age , DateTime birthday) ReturnMultiValueByValueTuple()
{
    return ("張三", 10, new DateTime(2013, 2, 28));
}

沒有留言:

張貼留言