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)
但是,当我在分配后立即调试并将鼠标悬停在该变量上时,它表示displayFlags是DisplayMode.Dim | DisplayMode.Inverted.
我错过了什么/不理解?
你错过了分配标志的合理值,例如:
[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等.这意味着组合枚举常量中的各个标志不重叠.
...