【C#】枚举位运算(省流版)

        C# 枚举的位运算是比较简单的,但是久了没有写容易忘记。然后网上百度到的靠前的资料又废话比较多,所以干脆自己记录一下。

        这里就把各种介绍全部省略了,只做个API介绍。

1、Flag 型枚举创建

    [System.Flags]
    public enum E_LayerType
    {
        None = 0,
        Layer1 = 1 << 1,
        Layer2 = 1 << 2,
        Layer3 = 1 << 3,
        Layer4 = 1 << 4,
        Layer5 = 1 << 5,
        Layer6 = 1 << 6,
        Layer7 = 1 << 7,
        Layer8 = 1 << 8,
        Layer9 = 1 << 9,
        Layer10 = 1 << 10,
    }

2、增加一个Flag

 Layer |= Flag;

示例:

Layer = Layer1,Layer4,Layer5

Flag= Layer2,Layer3,Layer4

运行结果:Layer = Layer1,Layer2,Layer3,Layer4,Layer5

.

3、移除一个Flag

Layer &= ~Flag;

示例:

Layer = Layer1,Layer4,Layer5

Flag = Layer2,Layer3,Layer4

运行结果:Layer = Layer1,Layer5

4、检测Flag

下面2个方法等价。

bool ret = Layer.HasFlag(Flag);
bool ret = (Layer & Flag) == Flag;

Layer = Layer1,Layer4,Layer5

Flag = Layer2,Layer3,Layer4 : Flase

Flag = Layer4 : True

Flag = Layer4,Layer5 : True

还有一种需求,就是查询 Layer 中是否包含 Flag 中的任意一个:

bool ret = (Layer & Flag) !=  E_LayerType.None;

Layer = Layer1,Layer4,Layer5

Flag = Layer2,Layer3,Layer4 : true

Flag = Layer2,Layer3: false

Flag = Layer4 : True

5、赋值

Layer = E_LayerType.Layer2;
Layer = E_LayerType.Layer2 | E_LayerType.Layer9 | E_LayerType.Layer4;

猜你喜欢

转载自blog.csdn.net/cyf649669121/article/details/130966479
今日推荐