Clearing Enum Flags

UPDATE: It looks like I am confusing a lot of people with this article. I wanted to write an article about something else than the title suggests (how flags enum are built) but I did not explain it well and what’s more important I forgot to mention the most important thing: how to simply clear a flag. I apologize for the confusion and here is the simple way of just clearing a flag:


public enum Foos {

    A = 1,

    B = 2,

    C = 4,

    D = 8,

    AB = A | B,

    CD = C | D,

    All = AB | CD


static class Program {

    static void Main() {

        Foos value = Foos.AB;



    public static Foos ClearFlag(Foos value, Foos flag) {

       return value & ~flag;



… I will try to write the other article some other time :-)