I was going to comment but what GrahamS said was important enough to warrant some elaboration of the point.
Flags are generally used when you specifically want to be able to set multiples. Here is an example of a our task enum
namespace Shared.Enumerations
{
[Flags]
public enum TaskStatusEnum
{
NotSet = 0,
Open = 1,
Canceled = 2,
Complete = 4,
OnHold = 8,
Inactive = 32,
All = Open | Canceled | Complete | OnHold | Inactive
}
}
We do this so we can say give us any task that is open or on hold.
TaskList activeTasks = taskListManager.TaskList.FindAll(target.Name, target.TaskType, (TaskStatusEnum.Open | TaskStatusEnum.OnHold));
Of course with a normal enumeration you can only set one thing at a time. You could actually do something like the following.
[TestMethod]
public void checkEnumVals()
{
var ts = TaskStatusTestEnum.Open;
ts |= TaskStatusTestEnum.OnHold;
bool matchBoth = false;
if ((ts & TaskStatusTestEnum.OnHold) == TaskStatusTestEnum.OnHold && (ts & TaskStatusTestEnum.Open) == TaskStatusTestEnum.Open)
matchBoth = true;
Assert.IsTrue(matchBoth);
}
I wouldn't suggest something like this though.