【问题标题】:Idempotent modifiers in C#C#中的幂等修饰符
【发布时间】:2015-11-13 14:23:36
【问题描述】:

我注意到如果我写这样的东西:

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

编译器不会警告我有多个consts。所以这似乎模仿了 C 修饰符,因为它们是幂等的。

但是,如果我写:

private readonly readonly int a;

编译器警告我重复的readonly

那么这里发生了什么?修饰符是幂等的吗?


csc 版本 1.0.0.50618

【问题讨论】:

  • 第一行编译是您使用的任何编译器中的一个错误 - 您还没有告诉我们。它不能与 Roslyn 一起编译...
  • @JonSkeet 如果您尝试将其作为字段,它不会编译。它确实在方法 static void Main(string[] args) { const const const bool flag = true; } 中编译
  • @JakubLortz:不,在 VS2010 中仍然会产生错误 (Type expected)。
  • @JakubLortz:啊,谢谢。这就是为什么简短但完整的例子很重要。将根据规范仔细检查它是否无效,但它看起来确实只是一个编译器错误。
  • @SteffenWinkler 不,它仅适用于 C# 版本 6,与 Visual Studio 的版本无关。我本可以用 Notepad/Sublime 编写该代码并以这种方式编译它。

标签: c# csc


【解决方案1】:

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

local-constant-declaration 声明一个或多个局部常量。

本地常量声明
const 类型 常量声明符

常量声明符
常量声明符
常量声明符 , 常量声明符

常量声明符标识符 = 常量表达式

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

我已经提交了bug against Roslyn 以便修复它。

【讨论】:

猜你喜欢
  • 2012-08-26
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 2022-06-16
  • 2011-03-19
  • 2023-03-05
  • 2010-09-30
  • 2011-12-29
相关资源
最近更新 更多