class foo {
public readonly int bar;
};
foo a = new foo() { bar = 123 };
Run Code Online (Sandbox Code Playgroud)
error CS0191: A readonly field cannot be assigned to (except in a constructor or a variable initializer)
如何bar
在上面的对象初始化程序中指定?
我可以初始化readonly成员而无需为每个类/结构编写自定义构造函数吗?
foo a = new foo() { bar = 123 };
Run Code Online (Sandbox Code Playgroud)
由编译器转换为
foo temp = new foo();
temp.bar = 123;
foo a = temp;
Run Code Online (Sandbox Code Playgroud)
如您所见,赋值bar
既不在foo
构造函数中也不在变量初始值函数中.
所以答案是:你做不到.
总结其他答案:错误消息没有帮助-对象初始化程序不能与只读字段一起使用。
但是,具有命名实参的构造函数可以,并且这样做的语法非常相似。 如此类似,您甚至可能以为您实际看到的是只读字段的C#对象初始化程序(就像我以前看到的那样):
class Foo {
public Foo(int bar) {
this.bar = bar;
}
public readonly int bar;
};
Foo a = new Foo(bar: 123);
// instead of `new Foo() { bar = 123 };`
Run Code Online (Sandbox Code Playgroud)