EDIT:
Final Solution: Use the [Flags] attribute on the enum. Create an EnumExtensions class if more methods are needed.
[Flags] //Flags attribute creates a bitmask out of the enum.
public enum Day { None = 0x0, Monday = 0x1, Tuesday = 0x2, Wednesday = 0x4, Thursday = 0x8, Friday = 0x16, Saturday = 0x32, Sunday = 0x64 }
public static class EnumExtensions
{
public static List<string> ToList(this Enum item)
{
return item.ToString().Split(',').Select(m => m.Trim()).ToList();
}
//To match Linq's nomenclature.
public static bool Contains(this Enum item, Enum value)
{
return item.HasFlag(value);
}
}
public class Program
{
public static void Main()
{
var freeDays = Day.Monday | Day.Tuesday | Day.Friday;
var onSaturday = freeDays.Contains(Day.Saturday) ? "Yes" : "No";
Console.WriteLine(String.Format("Am I free on Saturday? {0}", onSaturday));
var onTuesday = freeDays.Contains(Day.Tuesday) ? "Yes" : "No";
Console.WriteLine(String.Format("Am I free on Tuesday? {0}", onTuesday));
//Use EnumExtensions to get the list of
foreach (var item in freeDays.ToList())
{
Console.WriteLine(item);
}
//Print csv
Console.WriteLine(freeDays);
}
}