我有像
这样的代码enum WeekDays
{
Sat = 64,
Sun = 1,
Mon = 2,
Tue = 4,
Wed = 8,
Thu = 16,
Fri = 32
WorkDays = Sat | Sun | Mon | Tue | Wed
}
我想了解更多关于:
WorkDays = Sat | Sun | Mon | Tue | Wed
它的价值意味着什么?
答案 0 :(得分:8)
您上面可能有[Flags]
个属性。
工作日创建为二进制或工作日值(不是我的工作日)。
所以天数是手动编号的,使它们的权力为2:
Sun = 0000001
Mon = 0000010
Tue = 0000100
Wed = 0001000
Sat = 1000000
等
然后你可以使用二元运算符来执行Set操作:
MyWeekend = Sat | Sun; // 1000000 | 0000001 = 1000001
并使用二进制文件来测试成员资格:
WeekDays d = ...;
if ((d & MyWeekend) != 0)
{
// it's weekend !
}
答案 1 :(得分:3)
您可以使用WorkDays测试某一天是否为工作日:
WeekDays d = ... ; // set some value if ( d & WeekDays.WorkDays ) { // d is work day }
当然,枚举应该标记为Flags,正如另一个答案中已经提到的那样。
答案 2 :(得分:1)
它有点OR运算符。因此,您的工作日将具有1到64之间的值(表示每周的每个组合)。 假设你一周工作3天,比如Sun,Mon和Tue。
然后你的工作日将是Sun |周一|星期二(这是7)。
在二元操作中: 太阳 - 0000 0001 周一至周0000年 星期二 - 0000 0100
位或 - 0000 0111
因此,1到64之间的每个值都代表本周的每个可能组合。
答案 3 :(得分:0)
将值组合在一起=> |是OR运算符。
如果在enums中使用这样的内容,则使用“Flags”或“Bitfields”可用于存储值的组合。 你可以阅读更多关于这个的信息。在这里:http://msdn.microsoft.com/en-us/library/ms229062(v=VS.100).aspx
答案 4 :(得分:0)
enum WeekDays
{
Sat = 64, //value in binary = 1000000
Sun = 1, //value in binary = 0000001
Mon = 2, //value in binary = 0000010
Tue = 4, //value in binary = 0000100
Wed = 8, //value in binary = 0001000
Thu = 16, //value in binary = 0010000
Fri = 32 //value in binary = 0100000
WorkDays = Sat| Sun | Mon | Tue | Wed //binary or of sat-wed = 1001111
}