[Flags] Enum Attribute And Bitwise Operation In C#
The flags attribute should be used whenever the enumerable represents a collection of flags, rather than a single value. We must use multiples of two in our enumeration to use bitwise operations. Such collections are usually manipulated using bitwise operators, For example:
MyColors themeColors = MyColors.Yellow | MyColors.Red;
Example enum decleration:
[Flags]
public enum MyColors : int
{
Yellow = 1,
Green = 2,
Red = 4,
Blue = 8,
Orange = 16,
Black = 32,
White = 64,
}
The flags attribute doesn’t change enum values. It is enable a nice representation by the .ToString() method:
"themeColors.ToString" => "Yellow, Red"
Enumeration values looks like this:
Yellow = 0000001
Green = 0000010
Red = 0000100
Blue = 0001000
Orange = 0010000
Black = 0100000
White = 1000000
themeColors instance looks like this:
themeColors = 0000101
To retrieve the distinct values in our property one can do this,
Usage:
if ((themeColors & MyColors.Red) == MyColors.Red)
{
Console.WriteLine("Red is a theme color.");
}
if ((themeColors & MyColors.Green) == MyColors.Green)
{
Console.WriteLine("Green is a theme color.");
}
themeColors is 0000101
MyColor.Red is 0000100
———————————–(BITWISE AND)
Result is 0000100 -> It is a red color
Also we can use the bit-shifting for setting the enum values. It is more simple and more readable.
Example enum decleration using bit-shifting:
///
/// using bit-shifting
///
[Flags]
public enum MyColors_SetValuesWithBitShifting
{
Yellow = 1 << 0,
Green = 1 << 1,
Red = 1 << 2,
Blue = 1 << 3,
Orange = 1 << 4,
Black = 1 << 5,
White = 1 << 6,
}