枚举进行位运算 枚举组合z

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一般和枚举组合一起使用,便于查看枚举中的枚举值的组合;

Original: https://www.cnblogs.com/zeroone/p/9891179.html
Author: 武胜-阿伟
Title: 枚举进行位运算 枚举组合z

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/554434/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • ES6入门

    模板字符串 自动换行 let str1 = hello, es6 demo up! 其里面可使用表达式获取变量值 let name = "Mike" let a…

    技术杂谈 2023年6月21日
    091
  • 逻辑学

    最近跟我朋友小黑分享逻辑学,所以就跟小黑一起写了这篇文章 逻辑是什么 维基上说”有效推论和证明的原则与标准” 但是什么是有效的?这个我不太认同,我认为是逻辑…

    技术杂谈 2023年6月21日
    0102
  • Vue-CLI 项目搭建

    Vue-CLI 项目搭建 CLI CLI创建项目 方式一:命令行创建-vue create 方式二:使用图形化界面-vue ui 如何删除CLI预设 Vue项目目录及运行 运行 p…

    技术杂谈 2023年6月21日
    096
  • 我是如何使用freemarker生成Word文件的?

    推荐:亲身体验,数次踩坑,遂撰写此文,以备各位不时之需。 背景 一天,产品经理递给我了一份word报告,我定睛一看这个文档有大大小小的标题层级,还有排版好的段落、各种一目了然的饼图…

    技术杂谈 2023年7月25日
    0109
  • 为hade增加model自动生成功能

    大家好,我是轩脉刃。 我们写业务的时候和db接触是少不了的,那么要生成model也是少不了的,如何自动生成model,想着要给hade框架增加个这样的命令。 看了下网上的几个开源项…

    技术杂谈 2023年6月1日
    089
  • 5分钟搞定关系型数据库到Flink数据同步

    简述 实时数据处理领域中,使用 Flink 方式,除了从日志服务订阅埋点数据外,总离不开从关系型数据库订阅并处理相关业务数据,这时就需要监测并捕获数据库增量数据,将变更按发生的顺序…

    技术杂谈 2023年7月24日
    087
  • 利用ServletContext,实现Session动态权限变更

    1、前言 很多Spring Boot应用使用了Session作为缓存,一般会在用户登录后保存用户的关键信息,如: 用户ID。 用户名。 用户token。 权限角色集合。 等等。。。…

    技术杂谈 2023年6月21日
    066
  • quartz框架(三)-调度器创建之实例化

    调度器创建之实例化 博主的前一篇博文主要介绍了schedule创建时的配置文件加载,下面博主将介绍一下scheduler的instantiate方法。 代码回顾 public Sc…

    技术杂谈 2023年7月24日
    075
  • 八、变量与常量

    一、变量 1.1、变量的基本概念 Java是一种强类型语言,每个变量都必须声明其类型。Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域。 type varN…

    技术杂谈 2023年6月21日
    0104
  • 说透缓存一致性与内存屏障

    故事还得从一个矛盾说起。 摩尔定律告诉我们:大约每18个月会将芯片的性能提高一倍。芯片的这种飞速发展直接导致了芯片的指令执行速度与内存读取速度之间的巨大鸿沟。 举个例子,CPU在1…

    技术杂谈 2023年7月23日
    058
  • WcfDataService with EntityFramework 6 的若干问题

    1.Microsoft.Data.Edm等NuGet包需要升级到5.6版本 2.SVC不要使用DataService基类 class WcfDataService1 : DataS…

    技术杂谈 2023年5月31日
    077
  • 力扣算法题9. 回文数(Java)

    力扣算法题9. 回文数(Java) 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一…

    技术杂谈 2023年7月25日
    066
  • MYSQL如何在创建表时添加判断条件

    大家好,我是小皓。 一、背景 今天在博主练习MYS创建表操作时遇到一个语法报错,就想着来和大家分享一下MYSQL如何在创建表时添加判断条件: 上网一查才发现,原来是自己在代码中添加…

    技术杂谈 2023年7月11日
    0100
  • 2022年最新动力节点Java自学全套视频资源

    今天整理了java开发的学习路线和相关的学习视频资源,非常适合零基础入门java的小伙伴,希望大家在学习的时候,能够节省时间。 【B站排名第一的】Java零基础视频844集(适合J…

    技术杂谈 2023年7月24日
    060
  • idea中隐藏.idea文件夹和.iml文件

    idea中的.idea文件夹和.iml是平常几乎不使用的文件,在创建父子工程或者聚合工程时反而会对我们操作产生干扰,所以,一般情况下,我们都将其隐藏掉,步骤如下: 操作前: 具体操…

    技术杂谈 2023年6月1日
    0101
  • SpringBoot后端接口项目

    创建SpringBoot项目 项目目录 实体类 点击查看代码 package com.bai.entity; import com.baomidou.mybatisplus.ann…

    技术杂谈 2023年7月11日
    069
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球