这两个枚举[Flags]声明(C#)之间有什么区别

twe*_*ypi 3 c# enums bit-manipulation bit

这是一个我要求理解而不是找出问题的问题.考虑以下两点:

[Flags]
    public enum Flags
    {
        NONE = 0x0,
        PASSUPDATE = 0x1,
        PASSRENDER = 0x2,
        DELETE = 0x4,
        ACCEPTINPUT = 0x8,
        FADE_IN = 0x10,
        FADE_OUT = 0x20,
        FADE_OUT_COMPLETE = 0x40
    }

[Flags]
    public enum Flags
    {
        NONE = 0x0,
        PASSUPDATE,
        PASSRENDER,
        DELETE,
        ACCEPTINPUT,
        FADE_IN ,
        FADE_OUT,
        FADE_OUT_COMPLETE
    }
Run Code Online (Sandbox Code Playgroud)

如果我使用后一个枚举检查某些东西,有时会有重叠(我认为类似的东西DELETE被解释为PASSUPDATE | PASSRENDER,而在第一个例子中,每个条目都独立于另一个条目(即DELETEDELETE使用不同的组合进行证明)一组标志).

Mar*_*ell 12

如果没有显式数字,枚举每次递增1(即使[Flags]指定),所以你得到:

[Flags]
public enum Flags
{
    NONE = 0x0,
    PASSUPDATE, // = 1
    PASSRENDER,// = 2
    DELETE,// = 3
    ACCEPTINPUT,// = 4
    FADE_IN ,// = 5
    FADE_OUT,// = 6
    FADE_OUT_COMPLETE// = 7
}
Run Code Online (Sandbox Code Playgroud)

这根本不是你想要的数字(当然也不是按位标志,通常是2的连续幂)