Проблема программирования Enum - PullRequest
2 голосов
/ 06 сентября 2011

У меня есть код вроде

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 ]

8 голосов
/ 06 сентября 2011

Возможно, у вас есть атрибут [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 !
}
3 голосов
/ 06 сентября 2011

Вы можете использовать WorkDays, чтобы проверить, является ли данный день рабочим:

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

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

Конечно, перечисление должно быть помечено как Флаги, как уже упоминалось в других ответах.

1 голос
/ 06 сентября 2011

это битовый оператор ИЛИ. Таким образом, ваши рабочие дни будут иметь значение от 1 до 64 (представляя каждую комбинацию недели). Предположим, вы работаете 3 дня в неделю, скажем, вс, понедельник и вторник.

Тогда ваши рабочие дни будут Солнцем | Пн | Вт (то есть 7).

В бинарной операции: Вс - 0000 0001 Пн - 0000 0010 Вт - 0000 0100

Бит или - 0000 0111

Таким образом, каждое значение от 1 до 64 будет представлять каждую возможную комбинацию недели.

0 голосов
/ 06 сентября 2011
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
}
0 голосов
/ 06 сентября 2011

Это или значения вместе => | является оператором OR.

Если использовать это внутри перечислений, вы используете «Флаги» или «Битовые поля», которые можно использовать для хранения комбинаций значений. Вы можете прочитать больше об этом, например. здесь: http://msdn.microsoft.com/en-us/library/ms229062(v=VS.100).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...