Record 记录类型
record/record struct、值相等、with 表达式、不可变性、init
Record 记录类型
C# 9 引入 record——不可变引用类型,值相等比较(而非引用相等),搭配 with 表达式创建修改副本。
学完本章你将: 掌握 record/record struct、值相等、with 表达式。
record 声明
csharp
// 位置记录(最简形式)
public record Person(string Name, int Age);
var p1 = new Person("小明", 25);
var p2 = new Person("小明", 25);
// 值相等——而不是引用相等!
Console.WriteLine(p1 == p2); // true
Console.WriteLine(p1.Equals(p2)); // true
// 自动生成的 ToString
Console.WriteLine(p1); // Person { Name = 小明, Age = 25 }
with 表达式 —— 创建副本
csharp
var p1 = new Person("小明", 25);
var p2 = p1 with { Age = 26 }; // 复制 + 修改指定属性
Console.WriteLine(p1); // Person { Name = 小明, Age = 25 }
Console.WriteLine(p2); // Person { Name = 小明, Age = 26 }
// p1 不变——不可变性
record struct(C# 10+)
csharp
// record struct:值类型版 record(栈分配)
public readonly record struct Point(double X, double Y);
var p1 = new Point(1, 2);
var p2 = new Point(1, 2);
Console.WriteLine(p1 == p2); // true
record vs class vs struct
| | record | class | struct | |---|---|---| | 相等性 | 值相等 | 引用相等 | 值相等 | | 不可变性 | 默认支持 with | 手动实现 | 手动实现 | | 分配 | 堆(引用类型) | 堆 | 栈(值类型) | | 适用 | 数据模型、DTO | 行为丰富的对象 | 小数据、高性能 |