简体   繁体   中英

Idempotent modifiers in C#

I noticed that if I write something like:

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

The compiler doesn't warn me of the multiple const s. So this seems to mimic C modifiers, as they are idempotent.

However, if I write:

private readonly readonly int a;

The compiler does warn me of the duplicated readonly .

So what's going on here? Are modifiers idempotent or not?


csc version 1.0.0.50618

It's a bug in the compiler - at least in Roslyn version 1.0.0.50618. From section 8.5.2 of the C# 5 specification:

A local-constant-declaration declares one or more local constants.

local-constant-declaration :
const type constant-declarators

constant-declarators :
constant-declarator
constant-declarators , constant-declarator

constant-declarator : identifier = constant-expression

As you can see, that grammar doesn't allow for const const const bool flag = true; .

I've filed a bug against Roslyn so that it can get fixed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM