我读了一本作者这样做的书:
public enum Move
{
normal = 0,
swim = 1 << 0,
crawl = 1 << 1,
creep = 1 << 3,
jump = 1 << 3,
fly = 1 << 4,
grapple = 1 << 5,
goes_through_door = 1 << 6
}
Run Code Online (Sandbox Code Playgroud)
为什么要这样做,为什么不让他们有默认值,如0,1,2,3 ......
这是一个枚举,其中值可用于按位运算符.它允许枚举值为多个值的组合.例如
Move crawlAndSwim = Move.crawl | Move.swim;
Run Code Online (Sandbox Code Playgroud)
然后可以使用按位运算符来检查某些值的存在或不存在
if (0 != (aMoveValue & Move.crawl)) {
// It's crawling
}
if (0 != (aMoveValue & Move.swim)) {
// It's swiming
}
Run Code Online (Sandbox Code Playgroud)
维基百科有一篇关于这个主题的好文章,你可能会感兴趣
注意:正如casperOne指出的那样,这种类型的枚举定义应该使用FlagsAttribute进行注释,以表示它是标志/位域与正常位置.