C#中的Record类型是什么 C# 9.0新特性Record的使用场景


Record 是 C# 9.0 引入的引用类型,用于简洁表示不可变数据模型,自动提供值相等性、ToString() 格式化和 with 表达式复制,适用于 DTO、事件建模等场景。

c#中的record类型是什么 c# 9.0新特性record的使用场景

Record 是 C# 9.0 引入的一种引用类型,专门用于表示不可变的数据模型。它简化了定义“数据承载类”的语法,并自动提供值语义的相等性判断、复制和格式化功能。与普通 class 不同,record 更强调“这个对象包含什么数据”,而不是“它能做什么行为”。

Record 的核心特性

定义一个 record 非常简单:

public record Person(string FirstName, string LastName, int Age);

上面这行代码相当于自动生成了:

  • 一个带有三个参数的构造函数
  • 三个只读属性(通过参数初始化)
  • 重写的 Equals()、GetHashCode() 方法,基于所有属性的值进行比较
  • ToString() 方法会输出类似 Person { FirstName = John, LastName = Doe, Age = 30 } 的格式
  • 支持 with 表达式实现非破坏性修改

例如:

var p1 = new Person("Alice", "Smith", 25);
var p2 = new Person("Alice", "Smith", 25);
Console.WriteLine(p1 == p2); // 输出 True,因为值相等

使用 with 表达式创建副本

由于 record 是不可变的,要“修改”某个字段,实际上是创建一个新实例:

var p3 = p1 with { Age = 26 };
Console.WriteLine(p3); // Person { FirstName = Alice, LastName = Smith, Age = 26 }

原始的 p1 不受影响,这种模式在函数式编程中非常有用。

可变 record 属性(可选)

虽然推荐不可变性,但你也可以定义可变属性:

阿贝智能 阿贝智能

阿贝智能是基于AI技术辅助创作儿童绘本、睡前故事和有声书的平台,助你创意实现、梦想成真。

阿贝智能 63 查看详情 阿贝智能 public record Person
{
public string FirstName { get; init; } // init-only setter
public string LastName { get; init; }
public int Age { get; set; } // 普通 setter,允许后续修改
}

init 访问器允许在对象初始化时赋值,之后不能再修改,有助于保持构造阶段的灵活性和运行时的不可变性。

适合使用 Record 的场景

Record 特别适用于以下情况:

  • 数据传输对象(DTO):在 API 接口之间传递数据,关注的是结构和内容,而非行为
  • 消息或事件建模:如订单创建、用户注册等事件,天然具备不可变特征
  • 配置或设置类:希望配置一旦建立就不被随意更改
  • 函数式编程风格:配合 with 表达式实现状态转换而不改变原对象
  • 单元测试中的测试数据构建:清晰、简洁地表达预期数据结构

比如在 ASP.NET Core 中返回 API 响应:

public record ApiResponse(bool Success, string Message, object Data);

这种写法比传统 class 更轻量,语义更明确。

基本上就这些。record 不是用来替代 class 的,而是为特定数据建模需求提供更优雅的语法支持。当你发现某个类主要用来存储数据、需要比较内容相等性、且倾向于不可变时,就可以考虑用 record。不复杂但容易忽略。

以上就是C#中的Record类型是什么 C# 9.0新特性Record的使用场景的详细内容,更多请关注其它相关文章!


# 中非  # 推特的网站怎么推广  # 佛山物业seo攻略  # 益阳政府网站建设  # 全网整合营销推广优化  # seo写文章注意事项  # 大足外贸营销推广平台  # 网络营销推广的重点  # 苏州seo顾问公司  # 网站建设选平台  # 云浮抖音搜索关键词排名  # c#  # 开源  # 如何处理  # 如何使用  # 新特性  # 适用于  # 阿贝  # 数据结构  # 死锁  # .net  # 用户注册 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: Golang如何操作指针参数_Go pointer参数传递规则  J*aScript与CSS动画:实现平滑顺序淡入淡出效果并解决显示冲突  铁路12306官网入口 铁路12306中国铁路官网登录首页  Golang如何使用log记录日志信息_Golang log日志记录方法总结  TikTok私信无法发送表情怎么办 TikTok消息表情发送修复方法  谷歌学术论文搜索引擎 谷歌学术官网入口论坛永久链接  QQ邮箱手机版网页版 QQ邮箱登录入口地址  Python实战:高效处理实时数据流中的最小/最大值  《律学法考》查看学习数据方法  基于键值条件高效映射 Pandas DataFrame 多列数据  Scipy Sparse CSR 矩阵非零元素行级遍历的最佳实践  Windows自带的便笺数据如何备份_防止数据丢失的便利贴迁移教程【干货】  J*aScript桌面应用_Electron多进程架构实战  中大网校app做题记录清除方法  小米手机截图后如何查看历史_小米手机截图历史记录查看方法  VS Code快捷键when上下文子句的妙用  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  windows10怎么开启卓越性能_windows10电源选项代码激活  铁路12306买票怎么选双人铺 铁路12306卧铺分配规则说明  PHP安全加载非公开目录图片与动态内容类型处理指南  C++中std::thread和std::async的区别_C++并发编程与线程与异步任务比较  风车动漫官网首页入口登录 风车动漫在线观看正版地址  学习通网页版课程打不开_课程无法访问时的解决方法  win11资源管理器标签页怎么用 Win11文件管理器多标签高效操作【新功能】  使用TinyButStrong生成HTML并结合Dompdf创建PDF教程  Linux如何自动分析系统异常日志_Linux日志智能检测  J*aScript对象中深度嵌套URL键的查找与更新策略  铁路12306座位怎么选_12306官方选座操作方法  AI图层蒙版怎么用_AI图层蒙版应用技巧与设计实例  学习通网页版个人登录_学习通网页版个人账户登录入口  iphone16系列配置参数介绍  mysql归档数据怎么导出为csv_mysql归档数据导出为csv文件的方法  Python高效统计字典嵌套列表值在目标列表中的出现次数  Win10截图远程协助 Win10远程桌面截屏法【场景应用】  TikTok笔记文字无法编辑如何解决 TikTok笔记文字编辑优化方法  《淘宝联盟》推广自己的店铺方法  高德地图怎么查看未来行程规划_高德地图未来行程规划查看方法  在J*a里什么是行为抽象_抽象行为对代码复用的提升作用  Go Template中优雅处理循环最后一项:自定义函数实践  使用逻辑应用(Logic Apps)自动处理邮件附件中的XML到Excel  申通快件单号查询平台 申通包裹物流动态跟踪  《图怪兽》退出登录方法  空腹吃苹果好吗 苹果空腹摄入指南  Coolpad5890 ROM刷机包  米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复  mysql如何限制远程访问_mysql远程访问限制方法  如何在Golang中处理表单文件上传_Golang 表单文件上传示例  MacBook Pro词典使用指南  抖音号升级成企业资质怎么弄?有什么好处?  太平年在哪个平台播出 

 2025-12-02

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.