C# 是否需要标志属性?

C# 是否需要标志属性?,c#,.net,C#,.net,我发现有或没有标志属性,如果我定义了以下枚举,我可以执行位操作 enum TestType { None = 0x0, Type1 = 0x1, Type2 = 0x2 } 我想知道为什么我们需要flags属性?C#会以同样的方式对待它们,但C#不是唯一的消费者: PropertyGrid将以不同方式呈现,以允许组合 XmlSerializer将基于此标志接受/拒绝分隔的组合 Enum.Parse类似地(从字符串中),枚举的.ToString()的行为将不同 显示或处

我发现有或没有标志属性,如果我定义了以下枚举,我可以执行位操作

enum TestType
{
    None = 0x0,
    Type1 = 0x1,
    Type2 = 0x2
}
我想知道为什么我们需要flags属性?

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

  • PropertyGrid
    将以不同方式呈现,以允许组合
  • XmlSerializer
    将基于此标志接受/拒绝分隔的组合
  • Enum.Parse
    类似地(从字符串中),枚举的
    .ToString()
    的行为将不同
  • 显示或处理该值的许多其他代码将以不同的方式处理它们

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

有时
enum
值的位组合是有意义的(如
FileAccess
-读、写、读+写),有时则不是(通常)。因此,
[Flags]
是一种描述性的方法,用于在元数据中存储位操作对该枚举类型有意义的信息。这个属性有几个使用者,例如该枚举的
ToString

可能重复的事实上,我不认为它是重复的;dup没有涉及为什么需要它;所有的例子都是一样的way@Marc:嗯,我刚看完一些答案,你说的有道理。可能提到ToString,作为一种特别常见的操作?