在.NET开发中,记录类型(Record Types)为开发者带来了一种新的数据结构,它允许以更简洁、更易读的方式定义数据。在C#中,记录类型是在.NET 9.0版本中引入的,它提供了一种声明式的方式来定义数据,并且自动提供了诸如ToString()
和相等性检查等成员方法。
在记录类型出现之前,可能会使用数据传输对象(DTOs),它们通常看起来非常冗长。例如,一个简单的DTO可能如下所示:
public sealed class MyData
{
public MyData(string value1, int value2)
{
Value1 = value1;
Value2 = value2;
}
public string Value1 { get; }
public int Value2 { get; }
}
如上代码所示,即使是定义一个包含两个属性的简单类,代码的冗长程度也是显而易见的。而使用记录类型,可以将其简化为一行代码:
public sealed record MyData(string Value1, int Value2);
这种简化不仅使代码更加清晰,也更易于维护。此外,记录类型还为提供了一些额外的好处,比如自动生成的ToString()
方法和相等性重写等。
这是一个非常受欢迎的问题,尤其是因为这种改进极大地提高了许多软件工程师的生活质量。虽然记录类型本身不需要复杂的语言特性,但它需要编译器以特定的方式生成代码。
要使记录类型在早期版本中工作,需要确保至少安装了支持记录类型的编译器语言版本。以下是如何设置的步骤:
要启用记录类型,需要在项目文件中包含以下设置:
9.0
理论上,9.0是记录类型的最低版本要求,但随着探索解决方案的其余部分,可能希望根据后续情况将其更改为更高的值。以下是包含新行的csproj文件示例:
9.0
net4.8
设置完成后,可以保存项目并继续下一步。
解决方案将依赖于一个非常有用的NuGet包,名为PolySharp。可以通过.NET控制台命令或Visual Studio中的包管理器来添加它。安装完成后,就已经完成了所有必要的步骤。
值得一读的是PolySharp页面,看看可能能够解锁的其他功能。个人正在回顾许多Unity3D项目,并尝试找出可以开始包含哪些功能。这是因为Unity3D(在撰写本文时)在C#功能方面落后于他们的架构发展。