使用FlagsAttribute和一个很长的枚举

时间:2015-12-31 01:08:57

标签: c# .net enums

FlagsAttribute类的预期目的是允许枚举用作标志......

[Flags]
enum Color
{
    None = 0,
    Red = 1,
    Green = 2,
    Blue = 4
}

请注意,数值会以指数方式增长以允许组合(即3 == Red | Green

假设我有一个包含100个不同值的枚举...如何考虑到最大值甚至不适合ulong

1 个答案:

答案 0 :(得分:1)

使用枚举以外的东西。一个包含多个标志枚举的结构甚至只是内部的整数都可以使用。您可以将字段设置为私有,将选项列表设置为一组静态只读字段。只需添加您想要的操作员和方法,您应该好好去。

C#的标志枚举并不是很擅长他们所做的事情(例如,HasFlag会产生分配:Why Enum's HasFlag method need boxing?)。在制作枚举类型的替代方法时,您可以更有效,更通用地实现自己的等效方法。

clf

值得注意的是,您可能不需要100个二维空间颜色空间。对于颜色,如果你想要任何自定义颜色,你不需要标记枚举,只需要一个普通的枚举(如果你想要一组预定义的颜色)或类似带红绿色和蓝色值的结构。