C#enum,加倍以前的枚举值

时间:2015-12-01 20:29:12

标签: c# enums

我遇到了一些对我来说很奇怪的事情,但同时也因为我不知道的原因而有所了解。

我有这个枚举:

[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

根据需要,为什么我必须手动配置我的枚举值?

1 个答案:

答案 0 :(得分:1)

您需要这个的原因是标志枚举表示为二进制数。每个2的幂(1,2,4,8,16等)的值对应于二进制数中的不同索引:

  • 2 -> 10
  • 4 -> 100
  • 8 -> 1000

这是必不可少的,以便您可以确定给定值实际包含哪些标志。例如,如果您的类的枚举值为1110,则其标志值为2,4和8。

如果使用的值不是2的幂,则在执行按位和&时,c#将无法再合理地区分类标志所表示的枚举值。