C#怎么使用Tuple和ValueTuple C#元组类型使用方法

来源:这里教程网 时间:2026-02-21 17:32:55 作者:

在C#中,Tuple(引用类型,.NET Framework 4.0引入)和ValueTuple(值类型,C# 7.0+推荐使用)都用于快速封装多个不同类型的值,但它们在性能、语法和用法上有明显区别。现在基本只推荐用

ValueTuple
,它更轻量、支持解构、可命名字段,且无需额外 NuGet 包(.NET Core 2.0+ / .NET 5+ 内置)。

ValueTuple 基本声明与创建

可以直接用括号语法创建,比

Tuple.Create()
简洁得多:

var person = ("张三", 28, true);
→ 编译器推断为
(string, int, bool)
显式指定类型:
ValueTuple<string int bool> t = ("李四", 31, false);</string>
给字段起名(增强可读性):
var user = (Name: "王五", Age: 25, IsActive: true);
,之后可用
user.Name
访问

解构(Deconstruction)让取值更直观

不用再写

t.Item1
t.Item2
,直接拆成变量:

var (name, age, active) = ("赵六", 29, true);
→ 自动按顺序赋值
也可部分解构:
var (name, _, _) = user;
(下划线忽略不需要的字段)
方法返回元组时特别方便:
var (code, msg) = GetResult();

ValueTuple 作为返回值或参数传递

适合替代 out 参数或小型 DTO:

返回多个值:
public (int sum, int count, double avg) Calculate(int[] nums) { ... }
接收元组参数:
void Print((string title, int year) book) => Console.WriteLine($"{book.title} ({book.year})");
注意:ValueTuple 是值类型,传参是复制,大数据量元组(如含大数组)可能影响性能,此时应考虑 class 或 ref 返回

和旧版 Tuple 的主要区别

别混用,避免隐式转换问题:

Tuple<t1></t1>
是类(class),存在堆分配;
(T1, T2)
是结构体(struct),栈上分配,无 GC 压力
Tuple
字段固定叫
Item1
Item2
ValueTuple
支持自定义字段名(编译期有效)
Tuple.Create(1, "a")
返回
Tuple<int></int>
;而
(1, "a")
ValueTuple<int></int>
,二者不兼容
.NET Standard 2.0+ 和所有现代 .NET 版本都原生支持
ValueTuple
,无需额外引用

基本上就这些。日常开发中,优先用

(type name, ...)
语法写 ValueTuple,配合解构和命名字段,代码更清晰、性能更好。旧项目若还在用
Tuple
,建议逐步迁移到
ValueTuple

相关推荐