信息发布→ 登录 注册 退出

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

发布时间:2025-12-12

点击量:
推荐使用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<string int bool> t = ("李四", 31, false);</string>
  • 给字段起名(增强可读性):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:

Procys Procys

AI驱动的发票数据处理

Procys 102 查看详情 Procys
  • 返回多个值:public (int sum, int count, double *g) 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 字段固定叫 Item1Item2ValueTuple 支持自定义字段名(编译期有效)
  • Tuple.Create(1, "a") 返回 Tuple<int></int>;而 (1, "a")ValueTuple<int></int>,二者不兼容
  • .NET Standard 2.0+ 和所有现代 .NET 版本都原生支持 ValueTuple,无需额外引用

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

以上就是C#怎么使用Tuple和ValueTuple C#元组类型使用方法的详细内容,更多请关注其它相关文章!


相关文章: 最新韩小圈网页版登录入口_官网在线观看官方链接  在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南  PHP中获取MongoDB服务器运行时间(Uptime)的专业指南  “音游” × “怪文书” 题材的节奏冒险游戏 《晕晕电波症候群》确定于2026年4月发售!  解决Django多数据库/多Schema环境下外键迁移问题  c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解  自定义 WooCommerce 购物车:始终显示全部交叉销售商品  怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】  汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口  怎么在mac上运行html代码_mac运行html代码方法【指南】  win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】  照顾宝贝2小游戏免费秒玩入口  抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站  快速CSGO开箱网站指南 CSGO开箱平台推荐  J*aScript中安全有效地处理localStorage字符串数据  2026春节假期时间安排 2026春节假日查询  抖音网页版怎么|直播|_抖音网页版开播操作指南  淘宝网网页版登录入口 淘宝官方网页版快捷登录  如何提高微信支付的安全性_微信支付安全防护与设置建议  WooCommerce 购物车显示所有交叉销售商品教程  Lar*el拼写容错搜索策略:基于语音编码的优化实践  Sublime Text怎么显示空格和制表符_Sublime显示不可见字符设置  手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析  uc浏览器网页版入口 uc浏览器网页版最新网址  Win11怎么关闭快速启动_Win11彻底关机设置教程  微博网页版官方账号登录 微博网页版内容浏览使用指南  12306怎么选座位选到安静区_12306选座安静区域选择策略  Archive of Our Own官网直达 AO3最新可用地址一览  2026年发布! 美少女养成动作RPG《神剑少女战记》发布实机演示  QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道  深入理解J*a链表中的IPosition接口与使用  Linux如何构建多环境配置管理_Linux多环境配置方案  c++ dfs和bfs代码 c++深度广度优先搜索算法  Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】  印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】  理解J*aScript Promise的微任务队列与执行顺序  Yandex免登录网页版地址 Yandex搜索引擎官方访问入口  微信网页版登录教程_微信网页版登录入口在哪  LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读  网易大神账号申诉需要多久_网易大神账号申诉流程说明  钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧  vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法  在J*aScript中复现SciPy的B样条拟合与求值:关键考量  蛙漫移动版在线看 蛙漫手机浏览器直达入口  小米14应用无法联网原因分析_小米14网络权限修复  高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法  深入理解Go语言中的指针类型:以*string为例  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  京东单号查询入口_京东快递订单追踪入口  Win11怎么开启省电模式_Win11电池节电模式自动开启 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!