using System.Collections.Generic;
public enum Day : ulong { None = 0, Monday = 1, Tuesday = 2, Wednesday = 4, Thursday = 8, Friday = 16, Saturday = 32, Sunday = 64 }
public static class EnumExtensions
public static List<string> ToList(this Enum item)
return item.ToString().Split(',').Select(m => m.Trim()).ToList();
public static bool Contains(this Enum item, Enum value)
return item.HasFlag(value);
public static ulong Take(this ulong item, int amount)
var bits = new List<ulong>();
for(int i = 0; i < 64 && bits.Count < amount; ++i)
if ((item & check) == check)
var result = bits.Aggregate((context, content) => context | content);
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));
foreach (var item in freeDays.ToList())
Console.WriteLine(freeDays);
Console.WriteLine((ulong) freeDays);
var val = (Day) ((ulong)freeDays).Take(2);