2011-09-06 134 views
2

我有一个像枚举编程问题

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 

什么是它的价值是什么意思?

+1

“不编程,但软件工程”的答案是,此代码适用于周末周四为周四至周五(沙特阿拉伯,也门,阿曼)的国家。 http://en.wikipedia.org/wiki/Workweek_and_weekend –

回答

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

你的星期六值是2的幂,应该是1000000而不是0100000. – mydogisbox

+0

@mydogisbox固定。 –

3

你可以用工作日来测试某一天是否是工作日:

 
WeekDays d = ... ; // set some value 

if (d & WeekDays.WorkDays) 
{ 
    // d is work day 
} 

当然,枚举应该被标记为标志,在另一个答案已经提到。

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 
} 
1

它有点OR运算符。因此,您的工作日将具有介于1和64之间的值(表示每周的每个组合)。 假设你在一周内工作3天,比如Sun,Mon和Tue。

然后你的工作日将是太阳|周一|星期二(这是7)。

二进制操作: 日 - 0000 0001 周一 - 0000 0010 周二 - 0000 0100

位或 - 0000 0111

所以到64 1之间的每个值将代表的每一个可能的组合周。