C# Flag 标志枚举结果计算过程
using System;
namespace EnumSample
{
[Flags]
public enum DaysOfWeek
{
Monday = 0x1,
Tuesday = 0x2,
Wednesday = 0x4,
Thursday = 0x8,
Friday = 0x10,
Saturday = 0x20,
Sunday = 0x40,
Weekend = Saturday | Sunday,
Workday = 0x1f,
AllWeek = Workday | Weekend
}
class Program
{
static void Main()
{
DaysOfWeekSamples();
ColorSamples();
UsingEnumClass();
Console.ReadLine();
}
private static void DaysOfWeekSamples()
{
DaysOfWeek mondayAndWednesday = DaysOfWeek.Monday | DaysOfWeek.Wednesday;
Console.WriteLine(mondayAndWednesday);//求解输出的值得计算过程
DaysOfWeek weekend = DaysOfWeek.Saturday | DaysOfWeek.Sunday;
Console.WriteLine(weekend);
DaysOfWeek workday = DaysOfWeek.Monday | DaysOfWeek.Tuesday | DaysOfWeek.Wednesday | DaysOfWeek.Thursday | DaysOfWeek.Friday;
Console.WriteLine(workday);
}
}
}
求解输出的值得计算过程
当你在枚举类型上定义了 [Flags] 属性时,可以使用位运算符 (| 或) 将多个常量合并成一个值。
例如,在 DaysOfWeek 枚举中,Monday 的值为 0x1,Wednesday 的值为 0x4,因此 Monday | Wednesday 的值为 0x1 | 0x4 = 0x5。
在 DaysOfWeekSamples 方法中:
mondayAndWednesday 的值为 DaysOfWeek.Monday | DaysOfWeek.Wednesday,即 0x1 | 0x4 = 0x5。
weekend 的值为 DaysOfWeek.Saturday | DaysOfWeek.Sunday,即 0x20 | 0x40 = 0x60。workday 的值为 DaysOfWeek.Monday | DaysOfWeek.Tuesday | DaysOfWeek.Wednesday | DaysOfWeek.Thursday | DaysOfWeek.Friday,即 0x1 | 0x2 | 0x4 | 0x8 | 0x10 = 0x1f。
因此,输出的值分别为 5,60 和 31。