欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

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

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