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,作为一种特别常见的操作?