【问题标题】:Using FlagsAttribute with a very long enum使用带有很长枚举的 FlagsAttribute
【发布时间】:2015-12-31 01:08:56
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# .net enums


    【解决方案1】:

    使用枚举以外的东西。具有多个标志枚举甚至内部只有整数的结构将起作用。您可以将字段设为私有,并将选项列表设为一堆静态只读字段。只需添加您想要的任何运算符和方法,您就可以开始使用了。

    C# 的标志枚举无论如何都不是很好(HasFlag 会产生分配,例如:Why Enum's HasFlag method need boxing?)。在为枚举类型创建自己的替代方案时,您可以更有效、更通用地实现自己的等效方法。

    struct Color
    {
        public static readonly Color None = new Color(),
        public static readonly Color Red = new Color(1),
        public static readonly Color Green = new Color(2),
        public static readonly Color Blue = new Color(100)
        private int data1;
        private int data2;
        private Color(int channel){...}
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      • 2022-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      相关资源
      最近更新 更多