在C#中对枚举进行位运算--枚举组合
程序员文章站
2022-12-11 07:58:56
由于枚举的基础类型类型为基本的数值类型,支持位运算,因此可以使用一个值表示多个枚举的组合,在定义枚举时需要指定枚举数为2的幂指数方便进行位运算,即枚举数为1,2,4,8…,或1,1<<1,1<<2…: 此时可以使用位移运算方便的获取多个枚举的组合变量: 或在组合中删除其中一项枚举: 需要判断是否包含 ......
由于枚举的基础类型类型为基本的数值类型,支持位运算,因此可以使用一个值表示多个枚举的组合,在定义枚举时需要指定枚举数为2的幂指数方便进行位运算,即枚举数为1,2,4,8…,或1,1<<1,1<<2…:
public enum myenum { myenum1 = 1, //0x1 myenum2 = 1 << 1, //0x2 myenum3 = 1 << 2, //0x4 myenum4 = 1 << 3, //0x8 myenum5 = 1 << 4, //0x10 myenum6 = 1 << 5, //0x20 myenum7 = 1 << 6 //0x40 }
此时可以使用位移运算方便的获取多个枚举的组合变量:
myenum myenum = myenum.myenum1 | myenum.myenum2; myenum |= myenum | myenum.myenum3;
或在组合中删除其中一项枚举:
myenum ^= myenum.myenum1; myenum &= ~myenum.myenum2;
需要判断是否包含某一枚举值时,可以使用以下方法判断:
(curmyenum & myenum.enum1) > 0
如果需要将枚举类型的变量视为一组标志,需要在枚举定义前加上flages特性:
[system.flags] public enum myenum { }
具有flags特性的枚举组合在调用实例方法tostring()时,会得到对应的枚举值组合,而非对应的枚举数:
//对于以上枚举,如果不带flags特性 console.writeline(myenum.myenum1 | myenum.myenum2); //3 //对于以上枚举,如果带上flags特性 console.writeline(myenum.myenum1 | myenum.myenum2); //myenum1, myenum2 ※特性flags一般和枚举组合一起使用,便于查看枚举中的枚举值的组合;
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的认可是我写作的最大动力!
作者:minotauros
出处:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。