首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

.NET 4.0 Tuple 元組:多重回傳值的輕量級最佳解法

     編輯:關於ASP.NET

在 .NET 4.0 以前,方法需要回傳多個值時,通常只有兩種不夠優雅的選擇:使用 out 參數(語法囉嗦、呼叫端易誤用),或另建 DTO 類別(增加檔案、過度設計)。System.Tuple 的出現,提供了輕量、型別安全、即時可用的多值回傳方案。

基本用法

private void TestTuple()
{
    var result = Test1(); // 型別推斷為 Tuple<int, int, string>
    if (result.Item3 == "Test1")
    {
        // 業務邏輯...
    }
}

private Tuple<int, int, string> Test1()
{
    return Tuple.Create(1, 3, "Test1");
}

關鍵特性

  • 不可變: 建立後所有 ItemN 唯讀,執行緒安全。
  • 型別安全: 編譯期即可檢查元素型別與數量。
  • 支援最多 8 個元素: Tuple<T1...T7, TRest> 第 8 位可再嵌套 Tuple。
  • 靜態工廠 Tuple.Create: 利用型別推斷簡化宣告,無需重複寫泛型參數。

進階技巧

1. 解構賦值 (C# 7.0+)

var (id, count, name) = Test1(); // 需 C# 7 / VS 2017+
Console.WriteLine($"{id}, {count}, {name}");

2. 作為 LINQ 查詢中間結果

var topUsers = users
    .GroupBy(u => u.Department)
    .Select(g => Tuple.Create(g.Key, g.Count(), g.Max(u => u.Salary)))
    .OrderByDescending(t => t.Item2)
    .Take(5);

3. 避免濫用:命名語意不清時改用 ValueTuple (C# 7 / .NET 4.7+)

// ValueTuple 可命名元素,可變更,效能更好
(int Id, int Count, string Name) GetUserStat() => (1, 3, "Test1");
var (Id, Count, Name) = GetUserStat();

適用場景 vs 不適用場景

適用不適用
私有/內部方法快速回傳 2~4 個相關值公開 API、跨組件介面(建議用 Record 或 DTO)
LINQ 中臨時分組統計需序列化傳輸(Tuple 非標準 JSON 結構)
避免為一次性邏輯建立類別元素超過 4 個且語意複雜(改用 class/record)

Tuple 是 .NET 基礎類別庫中「小而美」的工具,善用它能減少樣板碼,讓意圖更清晰。若專案已升級至 .NET 4.7+ / C# 7,優先考慮 ValueTuple 獲得更好效能與可讀性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved