public Person(string firstName, string lastName, int age, DaysOfWeekEnum dayOfBirth) { Id = new Random().Next(1, 99999); FirstName = firstName; LastName = lastName; Age = age; DayOfBirth = dayOfBirth; }
static void Main(string[] args) { EnumBitwiseOperators enumBitwise = new EnumBitwiseOperators(); Employee john = new Employee { Name = "John", AvailableForWorkDays = DaysOfWeekEnum.Monday | DaysOfWeekEnum.Wednesday | DaysOfWeekEnum.Weekend // bitwise OR operator to store multiple enum values }; Employee sarah = new Employee { Name = "Sarah", AvailableForWorkDays = DaysOfWeekEnum.Monday | DaysOfWeekEnum.Tuesday | DaysOfWeekEnum.Friday }; Console.WriteLine("John can only work " + john.AvailableForWorkDays); Console.WriteLine("Sarah can only work " + sarah.AvailableForWorkDays); DaysOfWeekEnum daysCoveredByEitherEmployee = enumBitwise.OperatorOR(john.AvailableForWorkDays, sarah.AvailableForWorkDays);// days that are covered by either employee Console.WriteLine("Days covered by either employee: " + daysCoveredByEitherEmployee); DaysOfWeekEnum daysCoveredByBothEmployees = enumBitwise.OperatorAND(john.AvailableForWorkDays, sarah.AvailableForWorkDays);// days that are covered by both employee's Console.WriteLine("Days covered by both employee's: " + daysCoveredByBothEmployees); DaysOfWeekEnum daysCoveredByAtLeastOneButNotBoth = enumBitwise.OperatorXOR(john.AvailableForWorkDays, sarah.AvailableForWorkDays); Console.WriteLine("Days covered by one but not both: " + daysCoveredByAtLeastOneButNotBoth); //Add Saturday to sarah sarah.AvailableForWorkDays = enumBitwise.SetFlag(sarah.AvailableForWorkDays, DaysOfWeekEnum.Saturday); Console.WriteLine("Sarah got Saturday :( " + sarah.AvailableForWorkDays); //John got weekend off lol john.AvailableForWorkDays = enumBitwise.UnsetFlag(john.AvailableForWorkDays, DaysOfWeekEnum.Weekend); Console.WriteLine("John got weekend off(yay) " + john.AvailableForWorkDays); Console.ReadKey(true); }
public DaysOfWeekEnum OperatorOR(DaysOfWeekEnum a, DaysOfWeekEnum b) { return(a | b); }
public DaysOfWeekEnum ToogleFlag(DaysOfWeekEnum a, DaysOfWeekEnum b) { return(a ^ b); //XOR operator allows the "Toggle" functionality }
// Works with "None" as well public bool HasFlag(DaysOfWeekEnum a, DaysOfWeekEnum b) { return((a & b) == b); // if a AND b has b }
public DaysOfWeekEnum UnsetFlag(DaysOfWeekEnum a, DaysOfWeekEnum b) { return(a & (~b));// a AND NOT b removes b flag }
//Useful methods with flags public DaysOfWeekEnum SetFlag(DaysOfWeekEnum a, DaysOfWeekEnum b) { return(a | b); //uses OR operator so if flag is already set, nothing changes }
public DaysOfWeekEnum OperatorNOT(DaysOfWeekEnum a) { return(~a); }
public DaysOfWeekEnum OperatorAND(DaysOfWeekEnum a, DaysOfWeekEnum b) { return(a & b); }