在仅由构造函数调用的私有方法中赋值readonly变量

C#编译器给了我以下错误

CS0191:无法分配只读字段(构造函数或变量初始化程序除外)

我是否必须将代码(在我的私有函数中)移动到构造函数中? 这听起来很尴尬。

请注意,私有方法仅用于构造函数调用。 我希望我可以使用某种属性来标记相应的方法。

尽管其他post说的是,实际上有一种(有点不寻常的)方法,并且实际上在方法中赋值:

public class Foo { private readonly string _field; public Foo(string field) { Init(out _field, field); } private static void Init(out string assignTo, string value) { assignTo = value; } } 

从这里得到的例子。

或者,您也可以从私有方法返回值,并在构造函数中分配它,如下所示:

 class Foo { private readonly string _field; public Foo() { _field = GetField(); } private string GetField() { return "MyFieldInitialization"; } } 

是。 您是否尝试过构造函数链接作为使用常用方法的替代方法?

 public StuffClass(string a, char b, int c) { _a = a; _b = b; _c = c; } public StuffClass(string a, char b) : this(a, b, 2) {} 

只读字段只能由构造函数指定。 你可以做的是用一个方法初始化字段:

 class Foo { private readonly Bar _bar = InitializeBar(); private Bar InitializeBar() { // Add whatever logic you need to obtain a Foo instance. return new Bar(); } } 

readonly成员只能在类级别或其构造函数中分配。 这是使用readonly关键字的好处。

 class Foo { private readonly Foo _foo = new Foo(); // Valid public Foo() { _foo = new Foo(); // Valid } private void SomeMethod() { _foo = new Foo(); // Not valid } } 

当使用类“其他string类”时,您可以使用readonly作为const关键字的替代,因为编译器不允许您将const分配给类。

如果你想修改它,你不应该只是首先阅读它。 一旦变量被读取,您只能在构造函数或声明时修改它,如错误所示

根据MSDN

readonly关键字是一个可以在字段上使用的修饰符。 当字段声明包含readonly修饰符时,声明引入的字段的赋值只能作为声明的一部分或在同一个类的构造函数中出现。