Flags / bit fields as Enum in C#
Enum in C# is a powerful construct. And besides its standard use It can also be used as a bit field / flags. The purpose of a bitfield / flags is to be able to combine multiple Enum values compared to the common single-value usage of Enum.
Example of a standard use Enum:
public enum Gender
{
Boy,
Girl,
Unknwon
}
public class Person
{
public string FirstName = "Mary";
public Gender Gender = Gender.Girl;
}
Note that the person only can have one gender.
Example of a bit field / flags Enum:
public enum Interests
{
Football = 1,
Dancing = 2,
Computers = 4,
Horses = 8
}
public class Person
{
public string FirstName = "John";
public Interests Interests = Interests.Computers | Interests.Dancing;
}
Note that a person in this example can have multiple interests.
It’s important that you define the values of a flags / bit field Enum as the power of two (2^1, 2^2, 2^3, 2^4 and so on…). Another difference from the first example is the [Flags]-attribute above the Enum definition, it enables a nice representation by the .ToString() method:
var john = new Person();
Console.WriteLine(john.Interests.ToString());
//Writes: Dancing, Computers