Подтвердить что ты не робот

Идемпотентные модификаторы в С#

Я заметил, что если я напишу что-то вроде:

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

Компилятор не предупреждает меня о нескольких const s. Таким образом, это, похоже, имитирует модификаторы C, поскольку они являются идемпотентными.

Однако, если я пишу:

private readonly readonly int a;

Компилятор предупреждает меня о дублированном readonly.

Итак, что здесь происходит? Модификаторы идемпотентны или нет?


csc версия 1.0.0.50618

4b9b3361

Ответ 1

Это ошибка в компиляторе - по крайней мере, в версии Roslyn 1.0.0.50618. Из раздела 8.5.2 спецификации С# 5:

Локальная константа-декларация объявляет одну или несколько локальных констант.

локальной постоянной декларации:
    const введите константы-деклараторы

Constant-declarators:
  постоянной описатель
  константа-деклараторы , константа-декларатор

постоянной описатель:   идентификатор = константное выражение

Как вы можете видеть, эта грамматика не позволяет использовать const const const bool flag = true;.

Я подал ошибку против Roslyn, чтобы она могла быть исправлена.