2019-9-2-C#枚举中使用Flags特性
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
C#枚举中使用Flags特性
|
lindexi
|
2019-09-02 12:57:37 +0800
|
2018-2-13 17:23:3 +0800
|
C#
|
如果对一个值可以包含多个,那么可以使用枚举,加上Flags
本文告诉大家如何写一个 Flags。
在写前,需要知道一些基础知识,取反、或、与,如果不知道的话,请去看看基础。
当然,这些太复杂了,我也不会在这里解释。
假如有类型 Show 的定义如下
[Flags]
public enum Show
{
A = 0x00000001,
B = 0x00000010,
C = 0x00000100,
D = 0x00001000,
}
合并多个值
合并多个,使用 |
Show show=Show.A | Show.B
枚举通过这个方法可以在一个变量包含多个值
判断是否存在某个值
一个简单方法是用 HasFlag,但是一个方法是用 &
Show show = Show.A | Show.B;
show.HasFlag(Show.A);
//其他
bool 包含 = (show & Show.A) !=0 ;
从性能上看通过 & 的性能会比 HasFlag 高,但是从可读性上 HasFlag 更友好,如果你的代码没有性能问题推荐使用 HasFlag 方法
只要一个 enum 使用了 Flags 标记就可以使用 HasFlag 方法
去掉一个值
Show show=Show.A | Show.B;
show=show & (~Show.A);
取反一个值
Show show=Show.A | Show.B;
bool 包含=(show & Show.A)!=0;
if(包含)
{
show=show & (~Show.A);
}
else
{
show=show | Show.A;
}
需要知道在以前,写枚举的值,不是二进制,现在C#7可使用二进制
[Flags]
public enum Show
{
A = 0b00000001,
B = 0b00000010,
C = 0b00000100,
D = 0b00001000,
}
于是这样就可以合并多个值,用一个 byte 表示一个值
2019-9-2-C#枚举中使用Flags特性的更多相关文章
- C#枚举中使用Flags特性
.NET中的枚举我们一般有两种用法,一是表示唯一的元素序列:还有就是用来表示多种复合的状态.这个时候一般需要为枚举加上[Flags]特性标记为位域,这样我们就可以用"或"运算符组合 ...
- C#枚举中使用Flags特性
如果对一个值可以包含多个,那么可以使用枚举,加上Flags 本文告诉大家如何写一个 Flags. 在写前,需要知道一些基础知识,取反.或.与,如果不知道的话,请去看看基础. 当然,这些太复杂了,我也不 ...
- 使用C#的Flags特性
举个例子:我有如下的一个需求,当我想要取得用户信息的时候,会先从本地缓存中查找,找不到然后从分布式缓存中查找,最后找不到再从数据库中查询.但是有些场景我又不需要查询数据库. 所以我想建立如下这种模型. ...
- c# 枚举基础有[flags]和没有的的区别
枚举提供成组的常数值,它们有助于使成员成为强类型以及提高代码的可读性.在 C# 中,使用 enum 来声明枚举. 枚举分为简单枚举和标志枚举两种. 基本语法示例 enum Day { Sun, Mon ...
- 【转载】[C#]枚举操作(从枚举中获取Description,根据Description获取枚举,将枚举转换为ArrayList)工具类
关键代码: using System; using System.Collections; using System.Collections.Generic; using System.Compone ...
- Python enum 枚举 判断 key(键) 或者 value(值)是否在枚举中
Python enum 枚举 判断 key(键) 或者 value(值)是否在枚举中 python 的基本用法请浏览:https://www.cnblogs.com/ibingshan/p/98564 ...
- 返回枚举中的desciption
/// <summary> /// 返回枚举中的desciption /// </summary> /// <param name="value"&g ...
- java枚举中常见的7中用法
2016年08月11日 11:14:45 李学凯 原文链接https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的 ...
- visual studio 2019工具里添加开发中命令提示符的方法
最新新装了visual studio 2019,发现默认的没有开发者命令提示符 现将添加步骤描述如下: 从VS2019菜单选择"Tools",然后选择"外部工具" ...
随机推荐
- Linux ifconfig 查看网络接口状态
Linux ifconfig 如果不接任何参数,就会输出当前网络接口的情况: [root@localhost ~]# Linux ifconfig eth0 Link encap:Ether ...
- Hdu 2389 二分匹配
题目链接 Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K (Ja ...
- mytop安装,使用mytop监控MySQL性能 (总结)
mytop 是一个类似 Linux 下的 top 命令风格的 MySQL 监控工具,可以监控当前的连接用户和正在执行的命令. 1. 安装TermReadKey 下载地址: wget http ...
- CB Insights,201608月174家独角兽榜单出炉,上榜的33家中国公司都是谁?
全球最新独角兽榜单出炉,上榜的33家中国公司都是谁? Monica 2016-09-15 近日,美国市场调研公司CB Insights发布了全球独角兽榜单(估值10亿美元以上),共有来自21个国 ...
- 【linux配置】在VMware中为Redhat HAT配置本地yum源
在VMware中为Redhat HAT配置本地yum源 今天准备使用CM安装大数据环境,到需要几台机器都使用同一套yum源才可以,所以想到将Redhat镜像文件拷贝到虚拟机中,在挂起使用,最后通过ht ...
- Linux安装MariaDB(Mysql)和简单配置 mariadb
Linux安装MariaDB(Mysql)和简单配置 1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动Ma ...
- em grid control网格控制
网格控制 必须管理许多的数据库.应用服务器.web服务器和其他构件的企业可以采用em grid control Em grid control是一个基于web的用户界面,它与oracle企业内所有构件 ...
- TyvjP1266 费解的开关
P1266 费解的开关 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏 ...
- Servlet容器container
通俗点说,所谓容器,就是放东西的地方.Servlet容器自然就是放Servlet的地方.J2EE开发,是有分工的.一般的程序员,写得都是应用开发,我们会按照一定的规则,开发我们的系统,比如用Servl ...
- 2019-1-29-jekyll-如何加密博客-防止抓取
title author date CreateTime categories jekyll 如何加密博客 防止抓取 lindexi 2019-01-29 16:26:17 +0800 2018-2- ...