带标志的C#问题

Che*_*hev 2 .net c# asp.net variables enums

我有一个枚举(旗帜)

[Flags]
public enum DisplayMode
{
    None,
    Dim,
    Inverted,
    Parse,
    Italics,
    Bold
}
Run Code Online (Sandbox Code Playgroud)

我想将两个标志分配给变量,如下所示:

var displayFlags = DisplayMode.Parse | DisplayMode.Inverted;
Run Code Online (Sandbox Code Playgroud)

但是,当我在分配后立即调试并将鼠标悬停在该变量上时,它表示displayFlagsDisplayMode.Dim | DisplayMode.Inverted.

我错过了什么/不理解?

Jon*_*eet 9

你错过了分配标志的合理值,例如:

[Flags]
public enum DisplayMode
{
    None = 0,
    Dim = 1,
    Inverted = 2,
    Parse = 4,
    Italics = 8,
    Bold = 16
}
Run Code Online (Sandbox Code Playgroud)

这样,每个值在数字表示中都有一个单独的位.

如果你不相信你能够加倍值,你可以使用位移:

[Flags]
public enum DisplayMode
{
    None = 0,
    Dim =      1 << 0,
    Inverted = 1 << 1,
    Parse =    1 << 2,
    Italics =  1 << 3,
    Bold =     1 << 4
}
Run Code Online (Sandbox Code Playgroud)

来自以下文件FlagsAttribute:

FlagsAttribute和Enum指南

  • 仅当要对数值执行按位运算(AND,OR,EXCLUSIVE OR)时,才使用FlagsAttribute自定义属性进行枚举.

  • 定义2的幂的枚举常量,即1,2,4,8等.这意味着组合枚举常量中的各个标志不重叠.

...