2011-02-11 115 views
8

我发现有或无标志的属性,我可以做,如果我定义了以下枚举是否必须使用flags属性?

enum TestType 
{ 
    None = 0x0, 
    Type1 = 0x1, 
    Type2 = 0x2 
} 

我想知道为什么我们需要的属性标志位操作?

+0

[枚举标志属性](http://stackoverflow.com/questions/8447/enum-flags-attribute)可能的重复 – BoltClock 2011-02-11 10:28:50

+1

其实,我不认为这是一个骗局;那dup没有*触摸*为什么需要;在那里的所有例子都会以相同的方式工作 – 2011-02-11 10:29:58

回答

14

C#将把它们同任何一种方式,但C#是不是唯一的消费者:

  • PropertyGrid将呈现不同的看法,让组合
  • XmlSerializer将接受/拒绝在此基础上标志分隔组合
  • Enum.Parse同样(从字符串),并枚举的.ToString()将表现不同
  • 大量的显示或处理该值将把它们不同的其他代码当然

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

1

有时enum值的位组合有意义(如FileAccess-读,写,读+写),有时它们不是(通常)。所以[Flags]是描述性的方式来存储元数据信息位操作是有意义的对这个枚举类型。这个属性有几个消费者,例如那个枚举的ToString