Search code examples
c#enumsusingusing-statement

'Using static' on a class contained private enum in C#


Consider the following

class Body
{
    [Flags]
    enum Organs { None = 0, Brain = 1, Heart = 2, Kidney = 4, Skin = 8 }

    Organs damagedOrgan = Organs.Heart;
    Organs currentOrgan = Organs.Kidney;
    Organs favoriteOrgan = Organs.Brain;
    Organs biggestOrgan = Organs.Skin;
    Organs allOrgans = Organs.Heart | Organs.Kidney | Organs.Brain | Organs.Skin;
}

Could in certain cases be much more clean to just write as such:

using static Human.Body.Organs;

class Body
{
    [Flags]
    enum Organs { None = 0, Brain = 1, Heart = 2, Kidney = 4, Skin = 8 }

    Organs damagedOrgan = Heart;
    Organs currentOrgan = Kidney;
    Organs favoriteOrgan = Brain;
    Organs biggestOrgan = Skin;
    Organs allOrgans = Heart | Kidney | Brain | Skin;

}

This will however generate the following error.

Error CS0122 'Body.Organs' is inaccessible due to its protection level

Is there any way to have a using static block on an enum in a class contained (private) enum to avoid having to excessively name the enum?


Solution

  • using static will only work on accessible members - so private enum is out. However, it depends on how private you want your enum to be. If you're ok with making it internal, that'll work.