我有一个枚举(标志)

[Flags]
public enum DisplayMode
{
    None,
    Dim,
    Inverted,
    Parse,
    Italics,
    Bold
}


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

var displayFlags = DisplayMode.Parse | DisplayMode.Inverted;


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

我缺少/不了解什么?

最佳答案

您错过了为标志分配合理值的方法,例如:

[Flags]
public enum DisplayMode
{
    None = 0,
    Dim = 1,
    Inverted = 2,
    Parse = 4,
    Italics = 8,
    Bold = 16
}


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

如果您不信任将值加倍的能力,则可以使用位移:

[Flags]
public enum DisplayMode
{
    None = 0,
    Dim =      1 << 0,
    Inverted = 1 << 1,
    Parse =    1 << 2,
    Italics =  1 << 3,
    Bold =     1 << 4
}


FlagsAttribute的文档中:


  FlagsAttribute和Enum准则
  
  
  仅当对数字值执行按位运算(AND,OR,EXCLUSIVE OR)时,才将FlagsAttribute自定义属性用于枚举。
  以2的幂定义枚举常数,即1、2、4、8等。这意味着组合枚举常量中的各个标志不会重叠。
  
  
  ...

10-08 13:38