加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 23:59:08 所属栏目:百科 来源:网络整理
导读:这是一个我要求理解而不是找出问题的问题.考虑以下两点: [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 Flag
这是一个我要求理解而不是找出问题的问题.考虑以下两点:

[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,无法证明)使用一组不同的标志组合).

解决方法

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

[Flags]
public enum Flags
{
    NONE = 0x0,// = 1
    PASSRENDER,// = 2
    DELETE,// = 3
    ACCEPTINPUT,// = 4
    FADE_IN,// = 5
    FADE_OUT,// = 6
    FADE_OUT_COMPLETE// = 7
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读