是否需要flags属性?

时间:2011-02-11 10:25:52

标签: c# .net

我发现有或没有flags属性,如果定义了以下枚举

,我可以进行位操作
enum TestType
{
    None = 0x0,
    Type1 = 0x1,
    Type2 = 0x2
}

我想知道为什么我们需要flags属性?

2 个答案:

答案 0 :(得分:14)

C#会以同样的方式对待它们,但C#并不是唯一的消费者:

  • PropertyGrid将以不同方式呈现它以允许组合
  • XmlSerializer将接受/拒绝基于此标记的分隔组合
  • Enum.Parse同样(来自字符串),枚举的.ToString()表现不同
  • 显示或处理该值的许多其他代码将以不同方式对待它们

更重要的是,它是对其他开发人员(和代码)的意图表达; 这意味着被视为组合,而非独占价值

答案 1 :(得分:1)

有时enum值的位组合是有意义的(如FileAccess - 读,写,读+写),有时它们不是(通常)。因此,[Flags]是在元数据信息中存储位运算在此枚举类型上有意义的描述性方法。该属性有几个消费者,例如该枚举的ToString