我发现无论是否使用 flags 属性,如果定义了以下枚举,则可以进行位操作。
enum TestType
{
None = 0x0,
Type1 = 0x1,
Type2 = 0x2
}
我在想为什么我们需要flags属性?
无论哪种方式,C#都会将它们视为相同,但C#并不是唯一的使用者:
PropertyGrid
会以不同的方式渲染它,以允许组合XmlSerializer
根据此标志接受或拒绝分隔的组合Enum.Parse
(从字符串转换)也是如此,并且枚举的.ToString()
行为不同更重要的是,它是向其他开发人员(和代码)表达意图的表达式:这意味着应该将其视为组合,而不是排他值。
FileAccess
- 读、写、读写),有时候则不是(通常情况下)。因此,[Flags]
是一种描述性的方式,用于在元数据中存储位操作在该枚举类型上是“有意义的”信息。这个属性有几个消费者,例如该枚举的ToString
方法。