2015-11-13 7 views
53

Ich habe bemerkt, dass, wenn ich so etwas schreiben:Idempotent Modifikatoren in C#

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

Der Compiler nicht mir der const s mehrere warnt. Dies scheint C-Modifikatoren nachzuahmen, da sie idempotent sind.

Allerdings, wenn ich schreibe:

private readonly readonly int a; 

Der Compiler tut warnen mich des duplizierten readonly.

Also, was ist hier los? Sind Modifikatoren idempotent oder nicht?


csc Version 1.0.0.50618

+13

Die erste Zeile kompiliert ist ein Fehler in dem Compiler, den Sie verwenden - was Sie uns nicht gesagt haben. Es kompiliert nicht mit Roslyn ... –

+0

Ich bin nicht sicher, ich sehe, was Ihre Beispiele mit idempotent zu tun haben. –

+1

Dies kompiliert auch nicht mit C# 5. – DavidG

Antwort

69

Es ist ein Fehler im Compiler - zumindest in Roslyn Version 1.0.0.50618. Aus dem Bereich 8.5.2 der C# 5-Spezifikation:

A local-Konstante-Deklaration erklärt eine oder mehr lokale Konstanten.

local-Konstant Erklärung:
      constTypKonstant Deklaratoren

Konstant Deklaratoren:
    Konstant declarator
    Konstant Deklaratoren,Konstant declarator

Konstant declarator:     Kennung=konstanter Ausdruck

Wie Sie sehen können, dass Grammatik doesn‘ t erlauben Sie const const const bool flag = true;.

Ich habe eine bug against Roslyn abgelegt, so dass es behoben werden kann.

+0

Diese [Pull-Anfrage] (https://github.com/dotnet/roslyn/pull/6929) scheint die Lösung zu sein. – DavidG