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

Record Struct 是 C# 10.0 正式引入的值类型记录结构,它把 struct 的栈分配、零 GC 开销优势,和 record 的语义能力(如值相等、自动 ToString、解构、with 表达式)结合在一起。不是语法糖,而是为性能敏感场景量身设计的轻量级不可变(或可控可变)数据载体。
适合小而固定的数据模型,比如坐标、颜色、尺寸、时间区间、HTTP 状态码包装等。
point with { Y = 5 }),但又不愿承担引用类型的堆分配开销最简形式就是位置语法,编译器自动生成只读属性、构造函数、Equals/GetHashCode/ToString/Deconstruct:
public readonly record struct Point(int X, int Y);
public int X { get; set; }),失去 record 的核心契约同一组数据(X/Y 坐标),不同定义方式的行为差异:
== 默认比较引用(对栈上值其实是逐字节比,但语义不明确),无 with,无解构支持用得顺手的前提是避开几个典型坑:
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中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号