全网整合营销服务商

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

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

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

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

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 属性(可选)

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

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#  # 用户注册  # .net  # String  # Object  # 构造函数  # bool  # int  # 数据结构  # 接口  # class  # 引用类型  # public  # 访问器  # var  # console  # 对象  # 事件  # 适用于  # 中非  # 的是  # 做什么  # 当你  # 而不  # 不受  # 重写  # 可选 


相关文章: 重庆市网站制作公司,重庆招聘网站哪个好?  制作门户网站的参考文献在哪,小说网站怎么建立?  ,怎么用自己头像做动态表情包?  建站之星后台管理系统如何操作?  Swift中循环语句中的转移语句 break 和 continue  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  文字头像制作网站推荐软件,醒图能自动配文字吗?  ui设计制作网站有哪些,手机UI设计网址吗?  如何用美橙互联一键搭建多站合一网站?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  用v-html解决Vue.js渲染中html标签不被解析的问题  建站之星收费标准详解:套餐费用及年费价格表一览  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  建站之星后台密码如何安全设置与找回?  定制建站如何定义?其核心优势是什么?  建站主机选虚拟主机还是云服务器更好?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  如何通过虚拟主机快速完成网站搭建?  网站制作企业,网站的banner和导航栏是指什么?  制作企业网站建设方案,怎样建设一个公司网站?  东莞专业制作网站的公司,东莞大学生网的网址是什么?  在线制作视频网站免费,都有哪些好的动漫网站?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  广州商城建站系统开发成本与周期如何控制?  实现虚拟支付需哪些建站技术支撑?  网站制作员失业,怎样查看自己网站的注册者?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  小型网站建站如何选择虚拟主机?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  如何在云主机快速搭建网站站点?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  设计网站制作公司有哪些,制作网页教程?  建站之星客服服务时间及联系方式如何?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  如何高效生成建站之星成品网站源码?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  实例解析Array和String方法  贸易公司网站制作流程,出口贸易网站设计怎么做?  如何在建站主机中优化服务器配置?  存储型VPS适合搭建中小型网站吗?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  三星网站视频制作教程下载,三星w23网页如何全屏?  如何在万网自助建站中设置域名及备案?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技? 

您的项目需求

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