Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CLR-用“声明枚举”;旗帜;属性_C#_Enums_Attributes_Clr_Enum Flags - Fatal编程技术网

C# CLR-用“声明枚举”;旗帜;属性

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>代码,这表明枚举可以被当作位字段。 真正重要的是适当地定义枚举值,以便

我在CLR/CLI中有以下枚举:

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谢谢!不显式指定枚举值是否可行?不,不是。您需要明确定义这些值。