C#枚举,上一个枚举值的两倍
本文关键字:枚举 两倍 上一个 | 更新日期: 2023-09-27 18:25:12
我遇到了一些对我来说很奇怪的事情,但同时也有一些道理,原因我不知道。
我有这个枚举:
[Flags] public enum Flags { RemoveQuoteMarks = 1, t1 = 2, t2 = 4, t3 = 8, t4 = 16, t5 = 32, t6 = 64, t7 = 128 }
以前,我没有手动设置枚举值,它们从0开始索引,并标准地增加1,对吗?
当我尝试加载这个字符串时,我注意到了奇怪的行为:
string value = "t1, t3, t4, t7";
并使用进行解析
Flags flags = (Flags)Enum.Parse(typeof(Flags), value);
结果只是"t7",所以我做了一些研究,并注意到很多其他人使用手动索引,其中每个枚举值都是前一个的两倍(例如"t3=8","t4=16"),所以我将这个规则应用于我的规则,它起了作用,我解析的枚举现在显示为:
t1, t3, t4, t7
根据需要,为什么我必须手动配置我的枚举值?
需要这样做的原因是标志枚举表示为二进制数。每一个2的幂值(1,2,4,8,16等)对应于二进制数中的不同索引:
2 -> 10
4 -> 100
8 -> 1000
这一点非常重要,这样您就可以确定给定值实际包含哪些标志。例如,如果类的枚举值为1110
,则其标志值为2,4和8。
如果您使用的值不是2的幂,那么在执行逐位和&
时,c#将无法合理区分类标志表示哪些枚举值。