枚举编程​​问题

时间:2011-09-06 14:50:43

标签: c# .net enums

我有像

这样的代码
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 

它的价值意味着什么?

5 个答案:

答案 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
}