当前位置:首页 > C# > 正文

C#记录结构体详解(新手也能掌握的record struct使用指南)

在 C# 9.0 中,微软引入了 record 类型,用于简化不可变数据类型的定义。随后在 C# 10.0 中,又新增了 record struct(记录结构体),将 record 的便利性扩展到了值类型领域。本文将带你从零开始了解并掌握 C#记录结构体 的使用方法,即使是编程小白也能轻松上手!

什么是 record struct?

传统的 struct 是 C# 中的值类型,适合表示轻量级、不可变或频繁复制的数据。而 record struct 是一种特殊的结构体,它自动提供了以下功能:

  • 基于值的相等性比较(EqualsGetHashCode
  • 简洁的构造语法(主构造函数)
  • 支持 with 表达式(创建副本并修改部分属性)
  • 自动生成 ToString() 方法
C#记录结构体详解(新手也能掌握的record struct使用指南) C#记录结构体 record struct教程 C#值类型记录 结构体编程指南 第1张

如何定义一个 record struct?

定义 record struct 非常简单,只需在 struct 前加上 record 关键字即可。你可以使用主构造函数语法来快速声明属性:

// 定义一个 Point 记录结构体public record struct Point(int X, int Y);

上面这行代码等价于手动编写一个包含只读属性、构造函数、EqualsGetHashCodeToString 的完整结构体!是不是非常方便?这就是 C#值类型记录 的魅力所在。

record struct 的核心特性演示

1. 基于值的相等性

var p1 = new Point(1, 2);var p2 = new Point(1, 2);Console.WriteLine(p1 == p2); // 输出 TrueConsole.WriteLine(p1.Equals(p2)); // 输出 True

2. 使用 with 表达式创建副本

var original = new Point(10, 20);var moved = original with { Y = 30 };Console.WriteLine(original); // Point { X = 10, Y = 20 }Console.WriteLine(moved);   // Point { X = 10, Y = 30 }

3. 自定义成员(可选)

你也可以在 record struct 中添加自定义方法或属性:

public record struct Point(int X, int Y){    public double DistanceToOrigin => Math.Sqrt(X * X + Y * Y);    public Point Move(int deltaX, int deltaY) =>        this with { X = X + deltaX, Y = Y + deltaY };}

record struct vs record class vs 普通 struct

特性 record struct record class 普通 struct
类型 值类型 引用类型 值类型
相等性 基于值 基于值 需手动实现
with 表达式 ✅ 支持 ✅ 支持 ❌ 不支持

何时使用 record struct?

当你需要一个轻量级、不可变、频繁复制且基于值比较的数据结构时,record struct 是理想选择。例如:

  • 坐标点(如 PointVector2
  • 颜色值(Color
  • 范围(Range
  • 货币金额(Money

记住:由于它是值类型,大量复制大尺寸的 record struct 可能影响性能,因此建议保持结构体小巧(通常小于 16 字节)。

总结

record struct 是 C# 10 带来的强大特性,它结合了 struct 的性能优势与 record 的开发便利性。通过本文的 record struct教程,你应该已经掌握了它的基本用法、核心特性和适用场景。现在,就去你的项目中尝试使用这种现代 C# 编程方式吧!

关键词回顾:C#记录结构体record struct教程C#值类型记录结构体编程指南