0

0

C#怎么使用Record Types C# 10 Record Struct用法

煙雲

煙雲

发布时间:2025-12-19 12:31:29

|

508人浏览过

|

来源于php中文网

原创

C# 10 中的 record struct 是轻量级、不可变、值语义的结构类型,自动实现相等比较、ToString 等,需显式或隐式 readonly,不支持 with 表达式和继承,适用于小数据模型与高性能场景。

c#怎么使用record types c# 10 record struct用法

在 C# 10 中,record struct 是一种轻量级、不可变(默认)、值语义的结构类型,适合用于数据载体(如 DTO、返回值、配置项等),相比 class-based record 更省内存、避免堆分配,也比普通 struct 更易用(自动实现 EqualsGetHashCodeToString==/!=)。

record struct 基本写法

语法和 record class 类似,但用 struct 关键字替代 class,且必须是 readonly(隐式或显式):

public readonly record struct Person(string Name, int Age);

这样就自动生成了:

  • 只读字段 NameAge
  • 位置构造函数(可直接传参初始化)
  • 基于值的相等比较(== / !=
  • 重写的 EqualsGetHashCodeToString
  • 解构支持(var (name, age) = person;

带命名字段和自定义成员的 record struct

你也可以显式声明字段、属性,甚至添加方法或自定义 ToString

银河易创
银河易创

一站式AIGC创作平台,集成GPT-3.5、GPT-4、文心一言等对话模型、Midjourney、DallE等绘画工具、AI音乐、AI视频和AI PPT等功能!

下载
public readonly record struct Point(double X, double Y)
{
    public double DistanceFromOrigin => Math.Sqrt(X * X + Y * Y);
<pre class="brush:php;toolbar:false;">public override string ToString() => $"({X:F2}, {Y:F2})";

}

注意:所有字段/属性仍需保持只读(initget-only),否则编译报错。不支持 with 表达式(这是 record class 的特性,record struct 没有引用语义,也不需要“复制并修改”)。

和普通 struct、record class 的关键区别

  • vs 普通 struct:不用手动实现 Equals/GetHashCode,不用写构造函数和 ToString,语义更清晰
  • vs record class:值类型(分配)、不可继承、无 with、无 Deconstruct 自动生成(除非显式写)、不能为 null(除非是可空类型如 Person?
  • 适用场景:小数据模型(如坐标、颜色、HTTP 状态码包装、API 响应体片段)、函数式风格参数传递、高性能路径中的临时值对象

使用注意事项

  • 必须加 readonly(C# 10 要求;省略会编译失败)
  • 不能包含字段初始化器(如 int Count = 0;),但可以用 init 属性或构造函数赋值
  • 不支持继承(不能 : BaseRecord),也不能被继承
  • 泛型支持良好:public readonly record struct Result<t>(T Value, bool Success);</t>

基本上就这些。record struct 不复杂但容易忽略它的值语义和 readonly 强制性——把它当成“带自动契约的轻量数据包”来用最自然。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.11.20

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1010

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

610

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

334

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

235

2025.08.29

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

443

2023.07.18

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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