Как проверить, поднят ли флаг перечисления вместе с другим перечислением? - PullRequest
2 голосов
/ 31 мая 2011

У меня есть следующее перечисление:

[Flags]
public enum Permissions
{
    None = 0x0000,
    All = 0xFFFF
}

Если поднят None или All, никакой другой флаг поднимать не следует.
Как я могу проверить, подняты ли «Нет» или «Все» и ничего больше?

Ответы [ 2 ]

6 голосов
/ 31 мая 2011

В перечислении флагов None должно быть нулем, а All должно быть накопленной битовой суммой.Это делает математику довольно простой, тогда:

if(value == Permissions.None || value == Permissions.All) {...}

может быть записано как switch, если вы предпочитаете ...

Однако, в случае general ,Вы можете проверить полное совпадение флагов (с любым количеством битов) с помощью:

if((value & wanted) == wanted) {...}

и проверить на любое перекрытие (т. е. любые общие биты - wanted должен быть ненулевым):

if((value & wanted) != 0) {...}
0 голосов
/ 31 мая 2011
if(value|Permissions.None)==Permissions.None;

Это может проверить разрешения. Ни один не поднимается. Остальное можно сделать таким же образом.

...