C# 的小惊喜:ValueTuple,让多返回值更优雅,性能更强

目录

ValueTuple(值元组) 入门

给元素起名字

返回多个值

解构赋值

Tuple vs ValueTuple

性能测试

应用场景

总结


在日常 C# 开发中,我们经常会遇到这样的需求:
👉 一个方法需要返回多个值。

在 C# 7.0 之前,常见的解决方案有两种:

  • • 使用out参数 —— 代码可读性差,方法签名不美观;

  • • 使用Tuple<T1,T2>元组—— 虽然能返回多个值,但字段名都是Item1, Item2...,不仅丑,而且是引用类型,性能不佳。

为了让代码更加简洁,C# 7.0 引入了ValueTuple。不仅能更优雅地返回多个值,还能起名字、支持解构,并且是值类型,性能也更好。


ValueTuple(值元组) 入门

最简单的方式就是用括号包起来:

var person = (1, "Alice", 23); Console.WriteLine(person.Item1); // 1 Console.WriteLine(person.Item2); // Alice Console.WriteLine(person.Item3); // 23

这里的person类型是(int, string, int),底层对应的是ValueTuple<int, string, int>


给元素起名字

相比老的TupleValueTuple最大的提升之一就是:可以给字段命名

var person = (Id: 1, Name: "Alice", Age: 23); Console.WriteLine(person.Id); // 1 Console.WriteLine(person.Name); // Alice Console.WriteLine(person.Age); // 23

这让代码的可读性大大提升。
(注意:运行时其实还是Item1, Item2...,编译器只是帮你映射了名字。)


返回多个值

这是ValueTuple的主战场。我们可以让方法同时返回多个值,并且支持解构:

static (int Sum, int Product) Calculate(int a, int b) { return (a + b, a * b); } var (sum, product) = Calculate(3, 4); Console.WriteLine(sum); // 7 Console.WriteLine(product); // 12

out参数优雅了点


解构赋值

还可以直接在赋值时拆开:

(int x, int y) = (10, 20); Console.WriteLine(x); // 10 Console.WriteLine(y); // 20

如果只需要其中一部分,可以用_忽略:

var person = (Id: 1, Name: "Alice", Age: 23); var (_, name, _) = person; Console.WriteLine(name); // Alice

Tuple vs ValueTuple

特性

Tuple (元组)

ValueTuple

引入版本

.NET Framework 4.0

C# 7.0

类型

引用类型(class)

值类型(struct)

字段名

Item1, Item2...

支持自定义名字

性能

需要堆分配,性能一般

值类型,性能更好

最大元素数

8(再多要嵌套)

8(再多也要嵌套)

简而言之:ValueTuple 更快、更简洁、更可读。


性能测试

Tuple vs ValueTuple 性能对比的小 Demo,来直观感受两者差距。

const int N = 10_000_000; var sw = new Stopwatch(); // 测试 Tuple sw.Start(); for (int i = 0; i < N; i++) { var t = new Tuple<int, int>(i, i + 1); } sw.Stop(); Console.WriteLine($"Tuple: {sw.ElapsedMilliseconds} ms"); // 测试 ValueTuple sw.Restart(); for (int i = 0; i < N; i++) { var vt = (i, i + 1); // ValueTuple } sw.Stop(); Console.WriteLine($"ValueTuple: {sw.ElapsedMilliseconds} ms");

输出:
Tuple: 109 ms
ValueTuple: 27 ms

为什么快?

  • Tuple= 引用类型(class),分配在堆上,每次循环都会触发对象创建。

  • ValueTuple= 值类型(struct),可以存放在栈上,内存分配和释放都更轻量。


应用场景

  • 方法返回多个值(比如计算结果、查询结果)

  • 临时组合数据(避免为小需求单独写一个class

  • LINQ 查询中快速返回多列

如,一个简单的字符串处理方法:

static (int Length, string Upper, string Lower) Process(string input) { return (input.Length, input.ToUpper(), input.ToLower()); } var (len, up, low) = Process("Hello"); Console.WriteLine($"{len}, {up}, {low}"); // 输出:5, HELLO, hello

是不是一下子就比out参数优雅多了?


总结

C# 7.0 的ValueTuple,为我们带来了一种全新的写法:

  • • 它是值类型,性能更好;

  • • 它支持命名字段,可读性强;

  • • 它支持解构,写法更优雅。

在日常开发中,如果你需要返回多个值,不妨你用用它。

一句话总结:ValueTuple = 轻量级的“小结构体”,让你的代码更简洁优雅。

引入地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1175002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚焦不锈钢管板:国内生产技术成熟的厂家一览,变压器法兰/压力容器法兰/双相钢法兰/不锈钢法兰,不锈钢管板公司哪个好 - 品牌推荐师

不锈钢管板作为工业管道系统的核心连接部件,其质量直接影响化工、船舶、能源等领域的设备安全性与运行效率。据中国机械工业联合会2024年行业白皮书显示,随着国内制造业升级,不锈钢管板年需求量突破80万吨,但市场存…

2026年市场评价好的锻件源头厂家哪家权威,法兰/双相钢法兰/非标法兰/船用法兰/变压器法兰,锻件供应商找哪家 - 品牌推荐师

锻件作为工业生产中连接管道、传递动力的核心部件,其质量直接影响石化、船舶、机械等领域的设备稳定性与安全性。随着2026年全球工业复苏,锻件需求量同比增长12%,但市场存在“以次充好”“交付延迟”等乱象。为此,…

.NET + Vue 3 全栈开发:基于 YOLO 的AI图像识别平台实践

目录 前言 项目介绍 1、前端 2、网关层 3、管理后台 4、AI处理核心 项目框架 项目流程图 系统流程图 系统E-R图 项目功能 1、用户管理 2、在线答题系统 3、AI图像识别 4、数据可视化大屏 5、工具箱模块 项目特点 1、技术栈前沿 2、微服务解耦 3、运维自动化…

2026年行业内可靠的不锈钢法兰厂商排行,非标法兰/不锈钢法兰/不锈钢管板/锻件/法兰,不锈钢法兰品牌怎么选择 - 品牌推荐师

随着工业管道系统对耐腐蚀性、耐高温性及密封性能要求的持续提升,不锈钢法兰作为关键连接部件,其市场集中度与专业化分工趋势愈发显著。2026年,行业头部企业通过技术迭代、非标定制能力强化及全周期服务升级,进一步…

基于Spark的传感器数据实时分析与预测

基于Spark的传感器数据实时分析与预测关键词&#xff1a;Spark、传感器数据、实时分析、预测、大数据处理摘要&#xff1a;本文主要探讨了如何利用Spark进行传感器数据的实时分析与预测。首先介绍了相关的背景知识&#xff0c;包括Spark的基本概念和传感器数据的特点。接着详细…

MySQL的一张表使用InnoDB引擎,创建时如果忘记给这张表添加主键,请问这边表有没有聚簇索引?如果有的话聚簇索引是什么样的?

聚簇索引创建的原则&#xff1a;主键存在&#xff1a;如果表中定义了主键&#xff0c;主键即为聚簇索引。没有主键时&#xff1a;如果没有定义主键&#xff0c;InnoDB 会选择第一个唯一且非空的索引作为聚簇索引。既没有主键也没有唯一索引时&#xff1a;如果既没有主键也没有合…

2026年RTO市场新动态:口碑供货商评测指南,旋风除尘器/沸石转轮/沸石转轮+CO/RTO,RTO制造商推荐榜 - 品牌推荐师

在日趋严格的环保法规与“双碳”目标驱动下,工业VOCs(挥发性有机物)治理已成为企业可持续运营的核心环节。作为主流高效治理技术,蓄热式热力焚烧炉(RTO)的性能与可靠性,直接关系到企业的环保合规性、运行成本及…

2026年国内诚信的沸石转轮+CO公司联系电话,沸石转轮/活性炭箱/沸石转轮+CO/除尘器,沸石转轮批发厂家排行榜单 - 品牌推荐师

引言 在化工、涂装、印刷、制药等涉及挥发性有机物(VOCs)排放的工业生产领域,沸石转轮吸附浓缩与催化燃烧(CO)组合工艺,已成为保障企业安全生产、改善作业环境、实现达标排放的核心技术装备之一。该技术凭借高净…

SMS-Activate停止运行

SMS-Activate是什么? SMS‑Activate(有时写作 SMS‑Activate.io / SMS‑Activate.org 等) 是一个在线 虚拟接码(短信接收)平台,用户可以在网站上购买或租用临时手机号码,用来接收 短信验证码(SMS OTP)。这类服…

Java服务入门级耗时/cpu/内存/io分析

1 通过JFR对某时段的cpu/耗时/内存分析 方法1: Async Profiler 下载地址: https://github.com/async-profiler/async-profiler/releases优点:轻量工具, 非侵入式修改字节码 完全避免安全点偏置问题 可直接监控native事…

详细介绍:技术演进中的开发沉思-219 Ajax:样式与事件

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【计算机毕业设计案例】基于python-CNN卷积神经网络深度学习训练识别不同颜色的裤子识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

提示工程架构师:为社会变革注入新动能

提示工程架构师:为社会变革注入新动能 1. 引入与连接 1.1 引人入胜的开场 在当今数字化浪潮汹涌澎湃的时代,想象这样一个场景:一家原本传统的农业企业,面临着农产品滞销、市场渠道狭窄的困境,濒临破产边缘。然而,在一位神秘高手的助力下,这家企业通过一款创新的农产品…

深度学习计算机毕设之基于卷神经网络python-CNN-pytorch训练识别苹果树叶病害识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

聚焦用户体验:近期备受推荐的RTO供货商深度解析,旋风除尘器/RTO/滤筒除尘器/除尘器/沸石转轮,RTO厂家怎么选 - 品牌推荐师

在工业废气治理领域,RTO(蓄热式废气焚烧设备)作为核心处理技术,直接影响企业排放达标率与生产连续性。面对环保政策趋严与治理成本攀升的双重压力,如何选择技术可靠、服务完备的RTO供货商成为企业关注的焦点。近期…

【课程设计/毕业设计】基于深度学习python-CNN-pytorch训练识别苹果树叶病害识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

全网最全专科生必用TOP10 AI论文工具测评

全网最全专科生必用TOP10 AI论文工具测评 2026年专科生AI论文工具测评&#xff1a;如何选对工具提升写作效率 随着人工智能技术的不断发展&#xff0c;AI论文工具逐渐成为高校学生&#xff0c;尤其是专科生群体的重要辅助工具。然而&#xff0c;市面上的工具种类繁多&#xff0…

20250117 之所思 - 人生如梦

20250117 之所思做的不好的几件事:1. 有点浮躁,很难静下心来去做自己本该计划好的事情,自己给自己安排的几个培训始终没有去做。-- 元旦假期之后又接近春节,心情有点浮动,盼望着春节快点到来好安心的休个长假,有…

深度学习毕设项目:基于python-CNN机器学习卷积神经网络训练识别不同颜色的裤子识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…