在C#中,我看过之前以标志格式使用的枚举。例如使用Regex
对象。
Regex regex = new Regex("expression", RegexOptions.Something | RegexOptions.SomethingElse);
如果我有自定义枚举:
enum DisplayType
{
Normal,
Inverted,
Italics,
Bold
}
如何格式化一个方法来接受一个参数的多个枚举,例如Regex的语法?即SomeMethod(DisplayType.Normal | DisplayType.Italics);
。
答案 0 :(得分:9)
使用FlagsAttribute
。 MSDN文档解释了一切。没有必要在这里重复一遍。
对于你的例子,你会说:
[Flags]
enum DisplayType {
None = 0,
Normal = 1,
Inverted = 2,
Italics = 4,
Bold = 8
}
答案 1 :(得分:3)
使用FlagsAttribute,如此
[Flags]
enum DisplayType
{
None = 0x0,
Normal = 0x1,
Inverted = 0x2,
Italics = 0x4,
Bold = 0x8
}
答案 2 :(得分:1)
请在此处查看“枚举类型为位标志”:http://msdn.microsoft.com/en-us/library/cc138362.aspx
答案 3 :(得分:0)
我知道我在聚会上有点迟了但是我想补充一下这个我保留的代码片段,因为它可以帮助我在需要时创建Flagged enums。
[Flags]
enum Generic32BitFlags
{
None = 0, /* 00000000000000000000000000000000 */
Bit1 = 1 << 1, /* 00000000000000000000000000000001 */
Bit2 = 1 << 2, /* 00000000000000000000000000000010 */
Bit3 = 1 << 3, /* 00000000000000000000000000000100 */
Bit4 = 1 << 4, /* 00000000000000000000000000001000 */
Bit5 = 1 << 5, /* 00000000000000000000000000010000 */
Bit6 = 1 << 6, /* 00000000000000000000000000100000 */
Bit7 = 1 << 7, /* 00000000000000000000000001000000 */
Bit8 = 1 << 8, /* 00000000000000000000000010000000 */
Bit9 = 1 << 9, /* 00000000000000000000000100000000 */
Bit10 = 1 << 10, /* 00000000000000000000001000000000 */
Bit11 = 1 << 11, /* 00000000000000000000010000000000 */
Bit12 = 1 << 12, /* 00000000000000000000100000000000 */
Bit13 = 1 << 13, /* 00000000000000000001000000000000 */
Bit14 = 1 << 14, /* 00000000000000000010000000000000 */
Bit15 = 1 << 15, /* 00000000000000000100000000000000 */
Bit16 = 1 << 16, /* 00000000000000001000000000000000 */
Bit17 = 1 << 17, /* 00000000000000010000000000000000 */
Bit18 = 1 << 18, /* 00000000000000100000000000000000 */
Bit19 = 1 << 19, /* 00000000000001000000000000000000 */
Bit20 = 1 << 20, /* 00000000000010000000000000000000 */
Bit21 = 1 << 21, /* 00000000000100000000000000000000 */
Bit22 = 1 << 22, /* 00000000001000000000000000000000 */
Bit23 = 1 << 23, /* 00000000010000000000000000000000 */
Bit24 = 1 << 24, /* 00000000100000000000000000000000 */
Bit25 = 1 << 25, /* 00000001000000000000000000000000 */
Bit26 = 1 << 26, /* 00000010000000000000000000000000 */
Bit27 = 1 << 27, /* 00000100000000000000000000000000 */
Bit28 = 1 << 28, /* 00001000000000000000000000000000 */
Bit29 = 1 << 29, /* 00010000000000000000000000000000 */
Bit30 = 1 << 30, /* 00100000000000000000000000000000 */
Bit31 = 1 << 31, /* 01000000000000000000000000000000 */
Bit32 = 1 << 32, /* 10000000000000000000000000000000 */
}