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 表示一个值

参见:http://www.cnblogs.com/jhxk/articles/1738831.html

2019-9-2-C#枚举中使用Flags特性的更多相关文章

  1. C#枚举中使用Flags特性

    .NET中的枚举我们一般有两种用法,一是表示唯一的元素序列:还有就是用来表示多种复合的状态.这个时候一般需要为枚举加上[Flags]特性标记为位域,这样我们就可以用"或"运算符组合 ...

  2. C#枚举中使用Flags特性

    如果对一个值可以包含多个,那么可以使用枚举,加上Flags 本文告诉大家如何写一个 Flags. 在写前,需要知道一些基础知识,取反.或.与,如果不知道的话,请去看看基础. 当然,这些太复杂了,我也不 ...

  3. 使用C#的Flags特性

    举个例子:我有如下的一个需求,当我想要取得用户信息的时候,会先从本地缓存中查找,找不到然后从分布式缓存中查找,最后找不到再从数据库中查询.但是有些场景我又不需要查询数据库. 所以我想建立如下这种模型. ...

  4. c# 枚举基础有[flags]和没有的的区别

    枚举提供成组的常数值,它们有助于使成员成为强类型以及提高代码的可读性.在 C# 中,使用 enum 来声明枚举. 枚举分为简单枚举和标志枚举两种. 基本语法示例 enum Day { Sun, Mon ...

  5. 【转载】[C#]枚举操作(从枚举中获取Description,根据Description获取枚举,将枚举转换为ArrayList)工具类

    关键代码: using System; using System.Collections; using System.Collections.Generic; using System.Compone ...

  6. Python enum 枚举 判断 key(键) 或者 value(值)是否在枚举中

    Python enum 枚举 判断 key(键) 或者 value(值)是否在枚举中 python 的基本用法请浏览:https://www.cnblogs.com/ibingshan/p/98564 ...

  7. 返回枚举中的desciption

    /// <summary> /// 返回枚举中的desciption /// </summary> /// <param name="value"&g ...

  8. java枚举中常见的7中用法

    2016年08月11日 11:14:45 李学凯  原文链接https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的 ...

  9. visual studio 2019工具里添加开发中命令提示符的方法

    最新新装了visual studio 2019,发现默认的没有开发者命令提示符 现将添加步骤描述如下: 从VS2019菜单选择"Tools",然后选择"外部工具" ...

随机推荐

  1. python OneHot编码

  2. Node.js调试技巧

    1. console.log 跟前端调试相同,通过一步步打印相关变量进行代码调试 2. 使用Node.js内置的调试器 通过node debug xxx.js来进行调试: [root@~/wade/n ...

  3. js中的如何定位固定层的位置

    需要获取一些HTML的对象的坐标来更灵活的设置目标层的坐标,这里可以通过用到document.body.scrollTop等属性,但是这些属性在xhtml的标准网页中或更简单的说就是带<!DOC ...

  4. H5C3--FileReader和拖拽的应用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. SSH 相关基础

    检查是否安装: sudo apt-cache policy openssh-client sudo apt-cache policy  openssh-server 也可直接用 sudo apt-ca ...

  6. 【eclipse】解决:eclipse或STS运行maven工程出现Missing artifact jdk.tools:jdk.tools:jar:1.7问题

    eclipse或STS运行maven工程出现Missing artifact jdk.tools:jdk.tools:jar:1.7问题 最近项目中使用到大数据平台,代码中应用了hbase-clien ...

  7. DMSkin https://github.com/944095635/DMSkin

    与源码无关内容 1.如果你有XAML相关的外包需求,可以通过QQ或微信与我取得联系.(QQ:"944095635" 微信号:"qq944095635") 2.我 ...

  8. DirectX11笔记(七)--Direct3D渲染3--INDICES AND INDEX BUFFERS

    原文:DirectX11笔记(七)--Direct3D渲染3--INDICES AND INDEX BUFFERS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...

  9. 【水滴石穿】mobx-todos

    我觉得代码在有些程序员手里,就好像是画笔,可以创造很多东西 不要觉得创意少就叫没有创意,每天进步一点点,世界更美好 首先源码地址为:https://github.com/byk04712/mobx-t ...

  10. 怎么用PHP+sqlite3验证登录用户名和密码

    Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象 ...