0

0

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

星降

星降

发布时间:2025-12-12 15:32:49

|

854人浏览过

|

来源于php中文网

原创

推荐使用ValueTuple而非Tuple,因其是值类型、性能更优、支持命名字段和解构;声明简洁如("张三",28,true),可命名如(Name:"王五",Age:25),支持var(name,age)=t解构,.NET Core 2.0+原生支持。

c#怎么使用tuple和valuetuple c#元组类型使用方法

在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 t = ("李四", 31, false);
  • 给字段起名(增强可读性):var user = (Name: "王五", Age: 25, IsActive: true);,之后可用 user.Name 访问

解构(Deconstruction)让取值更直观

不用再写 t.Item1t.Item2,直接拆成变量:

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

ValueTuple 作为返回值或参数传递

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

68爱写
68爱写

专业高质量AI4.0论文写作平台,免费生成大纲,支持无线改稿

下载
  • 返回多个值: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 是类(class),存在堆分配;(T1, T2) 是结构体(struct),上分配,无 GC 压力
  • Tuple 字段固定叫 Item1Item2ValueTuple 支持自定义字段名(编译期有效)
  • Tuple.Create(1, "a") 返回 Tuple;而 (1, "a")ValueTuple,二者不兼容
  • .NET Standard 2.0+ 和所有现代 .NET 版本都原生支持 ValueTuple,无需额外引用

基本上就这些。日常开发中,优先用 (type name, ...) 语法写 ValueTuple,配合解构和命名字段,代码更清晰、性能更好。旧项目若还在用 Tuple,建议逐步迁移到 ValueTuple

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

185

2023.09.27

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

338

2023.08.02

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.11.20

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

197

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

189

2025.07.04

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

197

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

189

2025.07.04

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

338

2023.08.02

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

5

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4.7万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Django 教程
Django 教程

共28课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号