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 下安装和使用 Redis
系统: CentOS-7-1611 首先安装gcc 因为要make编译 参照官网 wget 下载包 解压 make 编译完成后会在src目录下生成几个可执行文件 然后执行:make install ...
- 2019-2-14-VisualStudio-通过外部调试方法快速调试库代码
title author date CreateTime categories VisualStudio 通过外部调试方法快速调试库代码 lindexi 2019-2-14 22:1:37 +0800 ...
- 洛谷P3459 [POI2007]MEG-Megalopolis [2017年6月计划 树上问题02]
[POI2007]MEG-Megalopolis 题目描述 Byteotia has been eventually touched by globalisation, and so has Byte ...
- LintCode刷题笔记-- InterLeaving
标签: 动态规划 解题思路 1. 这道题最重要的是,存在三个字符串,但是并不需要两个二维矩阵来进行解,因为可以使用i+j-1来代表s3的下标,这样就可以通过i和j来遍历s3了.因为对于任何一个合法的交 ...
- intellij idea cpu占用率太大太满 运行速度太慢解决方案
1.关掉代码检查. setting -> Editor -> Inspections,把右面方框框里的对勾全去掉,或者根据需要去掉.原理是关闭不必要的代码检查,提高速度. 2.关掉多余的插 ...
- 每日算法之三十四:Multiply Strings
大数相乘,分别都是用字符串表示的两个大数.求相乘之后的结果表示. 首先我们应该考虑一下測试用例会有哪些,先准备測试用例对防御性编程会有比較大的帮助.可以考虑一些极端情况.有以下几种用例: 1)&quo ...
- eNSP模拟器路由器无法正常启动一直显示“#”——问题解决方法
eNSP模拟器路由器无法正常启动一直显示“#” 问题项如截图: 解决方案: 1. 打开自己电脑的控制面板 -->> 系统和安全 -->> Windows Defender防火墙 ...
- 写GULP遇到的ES6问题详解
Gulp.js 是一个自动化构建工具,开发者可以使用它在项目开发过程中自动执行常见任务.最近复习一下gulp一些基本的写法,在写了一些简单的uglify,rename,concat,clean的处理之 ...
- 【水滴石穿】react-native-app
项目地址:https://github.com/WQone/react-native-app 这个是一个非常优秀的小姐姐写的,希望大家能够以她为榜样,一起加油进步呀- 先看效果 分析package.j ...
- 第三方数据库管理工具Navicat使用教程
一.Navicat Premium是一个功能强大的第三方数据库管理工具,可以连接管理MySQL.Oracle.PostgreSQL.SQLite 及 SQL Server数据库. 使用Navicat软 ...