我发现有或没有flags属性,如果定义了以下枚举
,我可以进行位操作enum TestType
{
None = 0x0,
Type1 = 0x1,
Type2 = 0x2
}
我想知道为什么我们需要flags属性?
答案 0 :(得分:14)
C#会以同样的方式对待它们,但C#并不是唯一的消费者:
PropertyGrid
将以不同方式呈现它以允许组合XmlSerializer
将接受/拒绝基于此标记的分隔组合Enum.Parse
同样(来自字符串),枚举的.ToString()
表现不同更重要的是,它是对其他开发人员(和代码)的意图表达; 这意味着被视为组合,而非独占价值。
答案 1 :(得分:1)
有时enum
值的位组合是有意义的(如FileAccess
- 读,写,读+写),有时它们不是(通常)。因此,[Flags]
是在元数据信息中存储位运算在此枚举类型上有意义的描述性方法。该属性有几个消费者,例如该枚举的ToString
。