csc-C#中的幂等修饰符

我注意到,如果我写类似以下内容:

static void Main(string[] args)
{
    const const const bool flag = true;
}

编译器没有警告我多个readonly。 因此,这似乎模仿了C修饰符,因为它们是幂等的。

但是,如果我写:

private readonly readonly int a;

编译器确实警告我重复的readonly

那么这是怎么回事? 修饰符是幂等的吗?


csc版本1.0.0.50618

xdevel2000 asked 2020-01-14T05:13:22Z
1个解决方案
69 votes

这是编译器中的错误-至少在Roslyn 1.0.0.50618版本中。 从C#5规范的8.5.2节开始:

局部常量声明声明了一个或多个局部常量。

局部常量声明:
const const const bool flag = true;类型常量声明符

常量声明符:
常数声明符
常量声明符const const const bool flag = true;常量声明符

常量声明符:   标识符const const const bool flag = true;常数表达式

如您所见,该语法不允许使用const const const bool flag = true;

我已经针对Roslyn提交了一个错误,以便可以对其进行修复。

Jon Skeet answered 2020-01-14T05:14:20Z
translate from https://stackoverflow.com:/questions/33694904/idempotent-modifiers-in-c-sharp