+1  A: 

Just cast to an int, and then print out individual bits.

int x = (int)o
List<int> flags = new List<int>();
for(int i = 1; i < (1 << 30); i <<= 1)
    if(x & i != 0)
        flags.Add(i);
return flags;
Anon.
A: 

Well, you can replace steps 1-3 with a call to Enum.GetValues. And then use the bitwise & operator to test which of those are set in your value. This will be much faster than working with strings.

This method will support flags which are more than a single bit wide. If all bits are independent, just do what Anon said.

Ben Voigt
+3  A: 

To keep it linq-like

var flags = Enum.GetValues(typeof(Status))
                .Cast<int>()
                .Where(f=> f & o == f)
                .ToList();
Steve Mitcham
Ben Voigt
Ben Voigt
@Ben: You're right. And I also concede your points about the casts from `Enum` to `ulong`. I've deleted my misleading comments. (It was very late here when I posted and I obviously wasn't thinking straight!)
LukeH