全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

Record Struct适用于需高性能、值相等的小型不可变数据模型,如坐标、颜色等;它结合struct的栈分配与record的语义特性(值相等、ToString、解构、with表达式),避免GC开销,优于class record和普通struct,使用时应避免装箱、混用可变字段。

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、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 坐标),不同定义方式的行为差异:

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

实用注意事项

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

  • 别让它被隐式装箱 —— 传给 object 或非泛型集合(如 List)会失去值类型优势
  • 慎用可变字段混搭:比如 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 })
  • SpanMemory 配合良好,特别适合底层数据处理层建模

基本上就这些。


# c#  # 字节  #   # 状态码  # Object  # if  # 构造函数  # 结构体  # int  # 数据结构  # 继承  #   # class  # 值类型  # 引用类型  # public  # Struct  # 泛型  # var  # 对象  # http  # 高性能  # 但又  # 几个  # 什么时候  # 也能  # 不愿  # 适用于  # 数据处理  # 不支持  # 让它 


相关文章: 如何在阿里云通过域名搭建网站?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  红河网站制作公司,红河事业单位身份证如何上传?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  如何在阿里云香港服务器快速搭建网站?  如何用5美元大硬盘VPS安全高效搭建个人网站?  如何通过服务器快速搭建网站?完整步骤解析  C#怎么使用委托和事件 C# delegate与event编程方法  IOS倒计时设置UIButton标题title的抖动问题  北京企业网站设计制作公司,北京铁路集团官方网站?  如何通过.red域名打造高辨识度品牌网站?  已有域名如何快速搭建专属网站?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何高效利用亚马逊云主机搭建企业网站?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  如何挑选高效建站主机与优质域名?  上海网站制作开发公司,上海买房比较好的网站有哪些?  如何快速搭建高效可靠的建站解决方案?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  如何快速启动建站代理加盟业务?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  公司网站制作价格怎么算,公司办个官网需要多少钱?  深圳网站制作培训,深圳哪些招聘网站比较好?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  网站制作需要会哪些技术,建立一个网站要花费多少?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  网页设计与网站制作内容,怎样注册网站?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  黑客如何通过漏洞一步步攻陷网站服务器?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  Android滚轮选择时间控件使用详解  建站中国官网:模板定制+SEO优化+建站流程一站式指南  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  如何彻底卸载建站之星软件?  文字头像制作网站推荐软件,醒图能自动配文字吗?  制作网站公司那家好,网络公司是做什么的?  如何用低价快速搭建高质量网站?  建站之星收费标准详解:套餐费用及年费价格表一览  网站制作企业,网站的banner和导航栏是指什么?  如何快速使用云服务器搭建个人网站?  如何用y主机助手快速搭建网站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  建站主机选购指南与交易推荐:核心配置解析  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  如何用景安虚拟主机手机版绑定域名建站?  如何在阿里云虚拟服务器快速搭建网站?  如何选择高效便捷的WAP商城建站系统? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。