C# enum, double previous enum value
本问题已经有最佳答案,请猛点这里访问。
我遇到了一些我觉得奇怪的事情,但同时也有一些我不知道的原因。
我有这个枚举:
1 | [Flags] public enum Flags { RemoveQuoteMarks = 1, t1 = 2, t2 = 4, t3 = 8, t4 = 16, t5 = 32, t6 = 64, t7 = 128 } |
以前,我没有手动设置枚举值,它们从0开始索引,并标准地增加1,对吗?
当我试图加载这个字符串时,我注意到了一些奇怪的行为:
1 | string value ="t1, t3, t4, t7"; |
并使用以下方法进行分析:
1 |
结果仅仅是"t7",所以我做了一些研究,注意到很多其他人使用手动索引,其中每个枚举值都是前一个值的两倍(例如"t3=8","t4=16"),所以我将此规则应用到我的枚举中,它起作用了,我的解析枚举现在显示为:
1 | t1, t3, t4, t7 |
根据需要,为什么我必须像那样手动配置枚举值?
之所以需要这样做,是因为Flags枚举被表示为二进制数。每一个2次幂的值(1、2、4、8、16等)对应于二进制数中的不同索引:
2 -> 10 4 -> 100 8 -> 1000
这是必需的,这样您就可以确定给定值实际包含哪些标志。例如,如果类的枚举值为
如果使用的值不是2的幂,则在执行逐位和