以下内容无法编译。
public class A
{
private readonly int i;
public A()
{
void SetI()
{
i = 10;
}
SetI();
}
}
由于以下错误而失败:
CS0191无法分配只读字段(在构造函数或变量初始化程序中除外)
从技术上讲,我们仍然不在构造函数中,因为局部函数的可见性受到限制,所以我想知道为什么它不能编译。
答案 0 :(得分:21)
编译器将utf8_general_ci
局部函数转换为单独的类级方法。由于此单独的类级方法不是构造函数,因此不允许您从中分配只读字段。
因此,编译器采用以下方法:
iconv("ISO-8859-1", "UTF-8", $city);
并将其转换为:
<html lang="tr-TR">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />
({SharpLab。我放弃了SetI
以便进行编译。)
如您所见,它正在尝试从方法public class A
{
private readonly int i;
public A()
{
void SetI()
{
i = 10;
}
SetI();
}
}
(不是构造函数)中分配public class A
{
private readonly int i;
public A()
{
<.ctor>g__SetI|1_0();
}
[CompilerGenerated]
private void <.ctor>g__SetI|1_0()
{
i = 10;
}
}
。
很遗憾,尚未发布C#7.0语言规范,所以我无法引用它。
如果您尝试使用委托,则完全相同:
readonly
被编译为:
i
({SharpLab,同样没有<.ctor>g__SetI|1_0()
。)
...同样无法编译。