ProjectLombok的C#替代品-“不可变的设置器”

问题描述

ProjectLombok @With注释是否有C#替代方法

我想使用一些方便的方法来编写测试数据集,而无需进行太多编码。

解决方法

C#9将在没有任何外部库或IL编织的情况下原生支持此功能。

名为“ records”的新功能支持一个名为“ with-expressions”的子功能,该功能完全可以做到这一点:

Person brother = person with { FirstName = "Paul" };

此行从person变量创建一个新对象,该对象具有完全相同的数据,但FirstName设置为指定值。

Source,并提供了更好的解释。

,

C#9为此目的支持record。 早期版本中没有开箱即用的解决方案,因此您可能要使用3rd party库。例如。 https://github.com/ababik/Remute

如果必须处理C#9中的嵌套记录,这也很方便。

record Address(string Street,string State);
record Person(string FirstName,string LastName,Address Address);
var person1 = new Person(...);
var person2 = person.With(x => x.Address.Street,"new street");