suppose you have
enum MyEnum {A = 0, B = 1, C = 2, D = 4, E = 8, F = 16};
At some point you have a function that will check an instance of MyEnum and return true if it is C,D, or F
bool IsCDF(MyEnum enumValue)
{
return //something slick
}
I remember that there was some really slick way to do bit shifting and preform this operation that read way better than a bunch of ternary if statements but for the life of me I can’t remember what it is.
Anyone know?
If you make it a
[Flags]enum, you can assign a different bit value (1, 2, 4, 8, 16…) to each enumerated value. Then you can use a bitwise operation to determine if a value is one of a set of possible values.So, to see if it is C, D, or F:
or using
HasFlag()(less efficient but more readable):Note that this will not work for a value of 0 (in your example, ‘A’), and you must be careful that all enum values resolve to unique bit values (i.e. non-zero powers of two).
The advantages of this approach are:
Handy hint:
When defining [Flags] enums, use left-shift (
<<) to make the bit values clearer (and much harder to get wrong) especially for higher-order bits: