C# Init setter 不适用于 class 记录

C# Init setters don't work on class records

我正尝试在常规记录上使用初始化设置器,但它们似乎不起作用。但是当我添加单词“struct”以使其成为记录结构时,它工作正常。这是故意的吗?好像很奇怪。

它似乎不是一个视觉故障,因为它导致构建失败,重新启动 visual studio 没有任何区别。添加空括号也没有帮助。

I'm trying to use the init setters on a regular record, and they don't seem to work.

您在记录中使用了主构造函数语法,并且与任何 class 构造函数一样,任何时候您使用 new 关键字创建实例(相对于 with 语法)你需要向构造函数提供值。然后您还可以通过初始化语法初始化该值的事实只是主构造函数的参数也是 init 属性.

这一事实的产物

But when I add the word "struct" to make it a record struct it works fine. Is this intended?

是的。使您的记录成为 struct 时发生变化的原因是 C# 通常对 struct 有不同的规则。例如,如果您从未初始化一个结构字段,它将自动初始化为所有字段都设置为其默认值的状态。这基本上是 nullstruct 等效项,如果您使用 default 关键字初始化任何结构变量,也会发生同样的事情。

同样对于 structs,C# 始终允许您使用 new 关键字,就像为结构调用 public 默认 (no-argument) 构造函数一样:如果不存在这样的构造函数,它的行为与您使用 default 时的行为相同。因此,即使您声明了主构造函数,您也可以使用忽略该构造函数存在的语法。