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

.NET 4.0 Tuple 元組:讓方法輕鬆回傳多值

     編輯:ASP.NET 基礎

痛點回顧

在 .NET 4.0 之前,方法需要回傳多個值時,只有兩種不夠優雅的選擇:

  1. out / ref 參數 —— 呼叫端語法噁心、難以串聯、無法用於 Lambda/LINQ。
  2. 自訂類別/結構 —— 單純為了回傳多值而寫一堆 DTO,專案充斥 Result、Dto、Model 雜類。

Tuple 登場

.NET 4.0 引入 System.Tuple<T1, T2, ...>(最多 8 個型別參數),提供「匿名多值回傳」的標準化方式。

基本用法

// 建議使用 Tuple.Create 工廠方法,自動推斷型別
var result = Tuple.Create(1, 3, "Test1"); // Tuple<int, int, string>

// 存取屬性:Item1, Item2, Item3 ...
Console.WriteLine($"Id={result.Item1}, Count={result.Item2}, Name={result.Item3}");

實戰範例:解析字串回傳多值

public Tuple TryParseUserInput(string input)
{
    if (string.IsNullOrWhiteSpace(input))
        return Tuple.Create(false, 0, "輸入為空");

    if (int.TryParse(input, out int number))
        return Tuple.Create(true, number, "解析成功");

    return Tuple.Create(false, 0, "非數字格式");
}

// 呼叫端
var (success, value, msg) = TryParseUserInput("123"); // C# 7+ 解構語法
if (success) Console.WriteLine($"值:{value}");

進階:C# 7+ ValueTuple(更高效、語法更甜)

.NET 4.7 / .NET Core 2.0 引入 System.ValueTuple(結構體,非類別),效能更好、支援命名元素、解構語法:

// 回傳具名元組
public (bool Success, int Value, string Message) TryParseV2(string input)
{
    if (int.TryParse(input, out int n))
        return (true, n, "OK");
    return (false, 0, "Format error");
}

// 使用
var (ok, val, msg) = TryParseV2("456");
Console.WriteLine($"{ok} {val} {msg}");

Tuple vs ValueTuple 快速比較

特性Tuple (Class)ValueTuple (Struct)
記憶體堆積配置,GC 壓力堆疊配置,零 GC(小型)
可變性不可變可變(欄位可寫入)
命名元素不支援(僅 Item1...)支援 (int Id, string Name)
解構語法C# 7+ 支援原生支援
適用版本.NET 4.0+.NET 4.7+ / .NET Core 2.0+

最佳實務建議

  • .NET Framework 4.0~4.6.2 專案:使用 Tuple,搭配 Tuple.Create 簡化宣告。
  • .NET 4.7+ / .NET Core / .NET 5+ 專案:優先使用 ValueTuple(需引用 System.ValueTuple NuGet 套件於舊版 TFM)。
  • 公開 API / 跨組件:仍建議定義具名 record 或 class,語意更清晰、支援 XML 文件註解、版本演進更安全。
  • 內部私有方法、LINQ 中間投影:大方使用 Tuple/ValueTuple,減少樣板碼。

總結

Tuple 解決了「方法回傳多值」的長期痛點,配合 C# 7+ 解構語法與 ValueTuple,寫出的程式碼既簡潔又具表達力。記住:內部實作用 Tuple,對外契約用具名型別。

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