C# Record Struct是什么 - C# 10.0带来的高性能数据结构

煙雲
发布: 2025-12-04 11:36:08
原创
414人浏览过
Record Struct适用于需高性能、值相等的小型不可变数据模型,如坐标、颜色等;它结合struct的栈分配与record的语义特性(值相等、ToString、解构、with表达式),避免GC开销,优于class record和普通struct,使用时应避免装箱、混用可变字段。

c# record struct是什么 - c# 10.0带来的高性能数据结构

Record Struct 是 C# 10.0 正式引入的值类型记录结构,它把 struct 的分配、零 GC 开销优势,和 record 的语义能力(如值相等、自动 ToString、解构、with 表达式)结合在一起。不是语法糖,而是为性能敏感场景量身设计的轻量级不可变(或可控可变)数据载体。

核心定位:什么时候该用 Record Struct?

适合小而固定的数据模型,比如坐标、颜色、尺寸、时间区间、HTTP 状态码包装等。

  • 需要频繁创建/销毁,但又不想触发 GC —— 用 record struct 替代 class record 或普通 class
  • 数据天然按值比较(比如两个 Point(1,2) 应该 ==)—— 普通 struct 默认引用相等,record struct 自动实现值相等
  • 要享受 with 表达式带来的安全复制能力(如 point with { Y = 5 }),但又不愿承担引用类型的堆分配开销
  • 在 Span<T>、ref struct 或高性能管道中传递结构化数据时,需保证不可变性与内存局部性

基本写法与关键细节

最简形式就是位置语法,编译器自动生成只读属性、构造函数、Equals/GetHashCode/ToString/Deconstruct:

public readonly record struct Point(int X, int Y);
登录后复制
  • 加 readonly 是推荐做法:显式声明不可变,避免意外赋值,也利于 JIT 优化
  • 不加 readonly 也能写,但会生成可变属性(public int X { get; set; }),失去 record 的核心契约
  • 支持继承其他 record struct(不能继承 class 或 record class),但实际中极少需要
  • 不支持无参构造函数或字段初始化器 —— 必须通过位置参数或显式属性初始化

和常见类型对比一目了然

同一组数据(X/Y 坐标),不同定义方式的行为差异:

DubbingX智声云配
DubbingX智声云配

多情绪免费克隆AI音频工具

DubbingX智声云配 975
查看详情 DubbingX智声云配
  • 普通 struct:值类型,但 == 默认比较引用(对栈上值其实是逐字节比,但语义不明确),无 with,无解构支持
  • record class:引用类型,堆分配,GC 参与,适合生命周期长或较大对象;默认不可变 + 值相等
  • readonly struct:纯手工写的只读结构体,需手动实现 Equals/ToString/Deconstruct,易出错且冗长
  • record struct:值类型 + 编译器托管的 record 语义 = 安全、简洁、高性能三者兼顾

实用注意事项

用得顺手的前提是避开几个典型坑:

  • 别让它被隐式装箱 —— 传给 object 或非泛型集合(如 List<object>)会失去值类型优势
  • 慎用可变字段混搭:比如 public record struct MixedPoint(int X, int Y) { public int Z { get; set; } },Z 可变但 X/Y 只读,容易引发逻辑混淆
  • 解构和模式匹配完全可用:var (x, y) = point;if (p is Point { X: > 0 })
  • Span<T>Memory<T> 配合良好,特别适合底层数据处理层建模

基本上就这些。

以上就是C# Record Struct是什么 - C# 10.0带来的高性能数据结构的详细内容,更多请关注php中文网其它相关文章!

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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