我尝试了一个简单的记录:
#nullable enable
public record Product
{
public readonly string Name;
public readonly int CategoryId;
public readonly string Phone;
public readonly Address Address;
public readonly Manager Manager;
}
我收到了警告:
非空属性“Name”未初始化。考虑将该属性声明为可为空。
(CategoryId 除外,所有字段都是如此)
基本上,如果我理解正确,编译器不会自动生成接受和设置所有字段的构造函数(当使用 #nullable enable
时),我必须自己编写,即:
public Product(string Name, int CategoryId, string Phone, Address Address, Manager Manager) {
this.Name=Name;
this.CategoryId=CategoryId;
...
}
我的问题是,这正确吗?我对此感到非常惊讶,因为我认为整个重点是使创建这样的记录变得非常简单,并且编写/维护构造函数非常繁琐,尤其是在经常更改的大型记录上。
或者我错过了什么?
init
属性,而不是公共只读字段? - Camilo Terevintonew Product()
,这样你仍然可能会得到未初始化的成员变量。至少对于9.0版本,如果你想要#nullable enable
,你仍然需要继续编写构造函数。 - Camilo Terevinto