J’ai remarqué que si j’écris quelque chose comme:
static void Main(ssortingng[] args) { const const const bool flag = true; }
Le compilateur ne me prévient pas des multiples const
. Cela semble donc imiter les modificateurs C, car ils sont idempotents.
Cependant, si j’écris:
private readonly readonly int a;
Le compilateur me prévient de la readonly
double.
Alors, que se passe-t-il ici? Les modificateurs sont-ils idempotents ou non?
csc version 1.0.0.50618
C’est un bogue dans le compilateur – du moins dans la version 1.0.0.50618 de Roslyn. De la section 8.5.2 de la spécification C # 5:
Une déclaration de constante locale déclare une ou plusieurs constantes locales.
déclaration de constante locale :
Constants constants de typeconst
déclarants constants :
déclarateur constant
déclarants constants,
déclarant constantconstant-declarator : identificateur
=
expression-constante
Comme vous pouvez le voir, cette grammaire ne permet pas de const const const bool flag = true;
.
J’ai déposé un bug contre Roslyn pour qu’il puisse être corrigé.