C# CLR-用“声明枚举”;旗帜;属性
我在CLR/CLI中有以下枚举:C# CLR-用“声明枚举”;旗帜;属性,c#,enums,attributes,clr,enum-flags,C#,Enums,Attributes,Clr,Enum Flags,我在CLR/CLI中有以下枚举: public enum class Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; 在C#中,如果我想创建所选枚举的组合,我通常会在声明枚举之前添加[Flags]属性 < > C++中是否存在类似的内容?< p> FraseAtgult>代码,这表明枚举可以被当作位字段。 真正重要的是适当地定义枚举值,以便
public enum class Days
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
};
在C#中,如果我想创建所选枚举的组合,我通常会在声明枚举之前添加[Flags]
属性
< > C++中是否存在类似的内容?< p> <代码> FraseAtgult>代码,这表明枚举可以被当作位字段。 真正重要的是适当地定义枚举值,以便可以对它们执行AND、OR、NOT和XOR逐位操作,即应为每个枚举值指定下一个更大的2次方:
public enum class Days
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64
};
[Flags]
不会自动使枚举值为二的幂
您可以使用C++/CLI中的flags属性,如下所示:
[System::Flags]
public enum class Days : int
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64
};
[Flags]不会自动使枚举值为2的幂。但某些静态代码分析工具可能需要它:
您不需要Flags属性。您只需要适当地定义枚举值,以便对它们执行AND、OR、NOT和XOR位运算,即为每个值指定下一个更大的2次幂。@mm8谢谢!不显式指定枚举值是否可行?不,不是。您需要明确定义这些值。