ProjectLombok 的 C# 替代方案 - "Immutable setter"

C# alternative for ProjectLombok - "Immutable setter"

ProjectLombok @With 注释是否有一些 C# 替代方案?

我想使用一些方便的方法来准备测试数据集,而不需要太多编码。

C# 9 将原生支持此功能,无需任何外部库或 IL 编织。

名为“records”的新功能支持名为“with-expressions”的 sub-feature,它的作用恰恰是:

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

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

Source 有更好的解释。

C# 9 为此目的支持 record。 早期版本中没有开箱即用的解决方案,因此您可能需要使用 3rd 方库。例如。 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");