Что означает атрибут Enum [Flags] в C #? - PullRequest
1305 голосов
/ 12 августа 2008

Время от времени я вижу следующее перечисление:

[Flags]
public enum Options 
{
    None    = 0,
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8
}

Я не понимаю, что именно делает атрибут [Flags].

У кого-нибудь есть хорошее объяснение или пример, который они могли бы опубликовать?

Ответы [ 11 ]

5 голосов
/ 23 октября 2018

При работе с флагами я часто объявляю дополнительные элементы None и All. Они полезны для проверки, установлены ли все флаги или нет.

[Flags] 
enum SuitsFlags { 

    None =     0,

    Spades =   1 << 0, 
    Clubs =    1 << 1, 
    Diamonds = 1 << 2, 
    Hearts =   1 << 3,

    All =      ~(~0 << 4)

}

Использование:

Spades | Clubs | Diamonds | Hearts == All  // true
Spades & Clubs == None  // true
...