新闻中心

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#元组类型使用方法的详细内容,更多请关注其它相关文章!


# 下划线  # 网站建设胶州  # 小程序基于网站推广吗  # 网站建设教学视频教程  # 安徽省模板网站建设  # seo公司外包品达公关  # 罗平营销网站建设资费  # 网站如何搜索引擎优化  # 阿里淘宝搜索关键词排名  # 龙岗区网站建设价格  # 东莞seo快速诊断  # 也可  # 上有  # 大数据  # 不需要  # 还在  # 王五  # 隐式  # 高性能  # 推荐使用  # 多个  # 隐式转换  # .net  # c#  # 区别  #  


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】  拼多多赚钱渠道_拼多多收益来源  AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南  谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示  在Socket.IO连接中实现Access Token自动更新与动态重连  Mac终端命令大全_Mac常用Terminal指令速查  LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读  C++如何实现单例模式_C++设计模式之线程安全的单例写法  steam官方网页快速访问 steam账号注册全流程  响应式图片在网页设计中的正确实现方法  C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能  lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法  Golang如何实现简单的Web表单_Golang表单提交与验证处理方法  TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程  css链接悬停下划线样式如何自定义_使用::after结合content和transition  内存疯狂猛猛涨价:主板销量直接腰斩!  如何在Promise链中优雅地中断后续then执行  mysql如何设置表访问权限_mysql表访问权限配置  限制HTML日期输入框的日期选择范围  12306选座系统怎么选连座_12306选座多人连坐操作方法  谷歌学术网站直达地址 谷歌学术搜索网页版一键进入  taptap防沉迷怎么解除 taptap解除健康系统限制说明【2025最新】  从OpenAI API响应中高效提取生成文本  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】  Win11怎么查看电脑配置_Win11硬件配置检测工具使用  神庙逃亡小游戏在线玩 神庙逃亡小游戏入口  优酷会员付费后没到账怎么办_优酷会员充值异常及解决方法  文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】  Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度  俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航  Python自定义类排序:解决lambda键值访问TypeError的实践指南  sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南  QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录  漫蛙2网页版漫画入口 漫蛙漫画在线官方登录  如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式  PrimeNG Sidebar背景色自定义指南:CSS覆盖与主题化实践  Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达  mcjs网页版流畅运行 mcjs低配电脑畅玩入口  Spyder启动失败:字体文件权限拒绝错误解决方案  电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】  C++ map遍历方法大全_C++ map迭代器使用总结  php源码怎么看淘宝客系统_看php源码淘宝客系统技巧  J*a里如何使用forEach遍历Map_Map遍历方法说明  Golang如何优化内存分配与垃圾回收_Golang内存管理与GC优化实践  一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化  马斯克:Optimus 人形机器人复数形式为 Optimi  荣耀Play7T运行卡顿解决_荣耀Play7T性能优化  Python中如何避免重复条件判断:利用数据结构实现动态逻辑  如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略 

搜索