Как сделать флаги в C # - PullRequest
       22

Как сделать флаги в C #

3 голосов
/ 24 сентября 2011

В C # я уже видел перечисления, используемые в формате флага.Например, для объекта Regex.

Regex regex = new Regex("expression", RegexOptions.Something | RegexOptions.SomethingElse);

Если у меня есть пользовательское перечисление:

enum DisplayType
{
    Normal,
    Inverted,
    Italics,
    Bold
}

Как мне отформатировать метод для приема нескольких перечислений для одного аргумента, напримерсинтаксис для регулярных выражений?т.е. SomeMethod(DisplayType.Normal | DisplayType.Italics);.

Ответы [ 4 ]

9 голосов
/ 24 сентября 2011

Используйте FlagsAttribute. Документация MSDN объясняет все. Нет смысла повторять это здесь.

Для вашего примера вы бы сказали:

[Flags]
enum DisplayType {
    None = 0,
    Normal = 1,
    Inverted = 2,
    Italics = 4,
    Bold = 8
}
3 голосов
/ 24 сентября 2011

Используйте атрибут Flags, например, так:

[Flags]
enum DisplayType
{
    None = 0x0,
    Normal = 0x1,
    Inverted = 0x2,
    Italics = 0x4,
    Bold = 0x8
}
1 голос
/ 24 сентября 2011

Смотрите "Типы перечисления как битовые флаги" здесь: http://msdn.microsoft.com/en-us/library/cc138362.aspx

0 голосов
/ 06 июля 2012

Я знаю, что немного опоздал на вечеринку, но я хотел бы добавить этот фрагмент кода, который я храню, потому что он помогает мне создавать помеченные перечисления, когда они мне нужны.

[Flags]
enum Generic32BitFlags
{
    None  =            0,       /* 00000000000000000000000000000000 */
    Bit1  =            1 &lt&lt 1,  /* 00000000000000000000000000000001 */
    Bit2  =            1 &lt&lt 2,  /* 00000000000000000000000000000010 */
    Bit3  =            1 &lt&lt 3,  /* 00000000000000000000000000000100 */
    Bit4  =            1 &lt&lt 4,  /* 00000000000000000000000000001000 */
    Bit5  =            1 &lt&lt 5,  /* 00000000000000000000000000010000 */
    Bit6  =            1 &lt&lt 6,  /* 00000000000000000000000000100000 */
    Bit7  =            1 &lt&lt 7,  /* 00000000000000000000000001000000 */
    Bit8  =            1 &lt&lt 8,  /* 00000000000000000000000010000000 */
    Bit9  =            1 &lt&lt 9,  /* 00000000000000000000000100000000 */
    Bit10 =            1 &lt&lt 10, /* 00000000000000000000001000000000 */
    Bit11 =            1 &lt&lt 11, /* 00000000000000000000010000000000 */
    Bit12 =            1 &lt&lt 12, /* 00000000000000000000100000000000 */
    Bit13 =            1 &lt&lt 13, /* 00000000000000000001000000000000 */
    Bit14 =            1 &lt&lt 14, /* 00000000000000000010000000000000 */
    Bit15 =            1 &lt&lt 15, /* 00000000000000000100000000000000 */
    Bit16 =            1 &lt&lt 16, /* 00000000000000001000000000000000 */
    Bit17 =            1 &lt&lt 17, /* 00000000000000010000000000000000 */
    Bit18 =            1 &lt&lt 18, /* 00000000000000100000000000000000 */
    Bit19 =            1 &lt&lt 19, /* 00000000000001000000000000000000 */
    Bit20 =            1 &lt&lt 20, /* 00000000000010000000000000000000 */
    Bit21 =            1 &lt&lt 21, /* 00000000000100000000000000000000 */
    Bit22 =            1 &lt&lt 22, /* 00000000001000000000000000000000 */
    Bit23 =            1 &lt&lt 23, /* 00000000010000000000000000000000 */
    Bit24 =            1 &lt&lt 24, /* 00000000100000000000000000000000 */
    Bit25 =            1 &lt&lt 25, /* 00000001000000000000000000000000 */
    Bit26 =            1 &lt&lt 26, /* 00000010000000000000000000000000 */
    Bit27 =            1 &lt&lt 27, /* 00000100000000000000000000000000 */
    Bit28 =            1 &lt&lt 28, /* 00001000000000000000000000000000 */
    Bit29 =            1 &lt&lt 29, /* 00010000000000000000000000000000 */
    Bit30 =            1 &lt&lt 30, /* 00100000000000000000000000000000 */
    Bit31 =            1 &lt&lt 31, /* 01000000000000000000000000000000 */
    Bit32 =            1 &lt&lt 32, /* 10000000000000000000000000000000 */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...