2015-11-13 10 views
53

ho notato che se scrivo qualcosa di simile:modificatori idempotent in C#

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

Il compilatore non mi avvisa del multiplo const s. Quindi questo sembra imitare i modificatori C, poiché sono idempotenti.

Tuttavia, se scrivo:

private readonly readonly int a; 

Il compilatore fa Avvisami del duplicato readonly.

Quindi cosa sta succedendo qui? I modificatori sono idempotenti o no?


CSC versione 1.0.0.50618

+13

Che la prima riga compili sia un bug in qualsiasi compilatore tu stia utilizzando, cosa che non ci hai detto. Non viene compilato con Roslyn ... –

+0

Non sono sicuro di vedere che cosa hanno a che fare i tuoi esempi con l'identrio. –

+1

Anche questo non viene compilato con C# 5. – DavidG

risposta

69

Si tratta di un bug nel compilatore - almeno a Roslyn versione 1.0.0.50618. Dalla sezione 8.5.2 della specifica C# 5:

A locale costante dichiarazione dichiara una o più costanti locali.

locale costante dichiarazione:
      consttipocostanti-dichiaratori

costanti-Dichiaratori:
    costante declarator
    costante dichiaratori,costante-dichiaratore

costante dichiaratore:     identificatore=costante espressione

Come si può vedere, che la grammatica doesn' t consentire const const const bool flag = true;.

Ho archiviato un bug against Roslyn in modo che possa essere corretto.

+0

Questa [richiesta pull] (https://github.com/dotnet/roslyn/pull/6929) sembra essere la soluzione. – DavidG

Problemi correlati