什么';s这两个enum[Flags]声明(C#)之间的区别

本文关键字:Flags 声明 区别 之间 enum 两个 什么 | 更新日期: 2023-09-27 17:57:35

这更多的是我想要理解的问题,而不是解决问题。考虑以下两个:

[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
    }

如果我使用后一个枚举对某个项目进行位检查,有时会出现重叠(我认为类似DELETE的项目被解释为PASSUPDATE | PASSRENDER,而在第一个示例中,每个项目都独立于另一个项目(即DELETE只是DELETE,不能使用不同标志集的组合来证明)。

什么';s这两个enum[Flags]声明(C#)之间的区别

在没有显式数字的情况下,枚举每次递增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
}

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