当前位置: 移动技术网 > IT编程>开发语言>.net > 在C#中对枚举进行位运算--枚举组合

在C#中对枚举进行位运算--枚举组合

2018年11月02日  | 移动技术网IT编程  | 我要评论

老白晓,江西养猪,大连小区发生爆炸

  由于枚举的基础类型类型为基本的数值类型,支持位运算,因此可以使用一个值表示多个枚举的组合,在定义枚举时需要指定枚举数为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
出处:

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网