正确使用Enum的FlagsAttribute
正确使用Enum的FlagsAttribute
FlagsAttribute 标志枚举对象的值可以包括多个枚举成员,每个成员代表枚举值中的一个位域
使用步骤
- 添加标记
[Flags]
- 用 2 的幂(即 1、2、4、8 等)定义枚举常量,比如0,1,1<<1,1<<2,1<<3
- 标记
[Flags]
的枚举项之间可以进行NOT,OR,AND,XOR操作
例子1
[Flags]
public enum DaysOfWeek
{
Sunday = 1,
Monday = 1 << 1,
Tuesday = 1 << 2,
Wednesday = 1 << 3,
Thursday = 1 << 4,
Friday = 1 << 5,
Saturday = 1 << 6,
}
var workDays1 = DaysOfWeek.Monday | DaysOfWeek.Tuesday |
DaysOfWeek.Thursday | DaysOfWeek.Thursday | DaysOfWeek.Friday;
var workDays2 = DaysOfWeek.Friday | DaysOfWeek.Saturday
| DaysOfWeek.Sunday;
~workDays1
//DaysOfWeek.Saturday,DaysOfWeek.Sunday
workDays1 ^workDays2
//DaysOfWeek.Monday, DaysOfWeek.Tuesday,DaysOfWeek.Thursday,
//DaysOfWeek.Thursday,DaysOfWeek.Saturday, DaysOfWeek.Sunday
workDays1&DaysOfWeek.Monday //DaysOfWeek.Monday
例子2
//判断是否包含某项
//.net4.0新增
if (workDays1.HasFlag(DaysOfWeek.Monday))
{
//...
}
//4.0以前的版本
if ((workDays1 & DaysOfWeek.Monday) == DaysOfWeek.Monday)
{
//...
}
正确使用Enum的FlagsAttribute的更多相关文章
- C#中正确使用enum做Key的姿势
C#中自定义enum,然后将其作为Dictionary的Key,通常的做法如下: using System; using System.Text; using System.Collections.G ...
- 【C#基础概念】枚举 (enum详解)
我们重点来讲解 简单枚举和标志枚举的用法和区别 继承 Object-> ValueType ->Enum Object-> ValueType ->struct 包括int f ...
- Java 语言中 Enum 类型的使用介绍【转载】
简介:本文主要介绍了 Java 语言中枚举类型,以及如何定制 Enum 类型的定义,如何正确使用 Enum 类型. From:http://www.ibm.com/developerworks/cn/ ...
- C#中enum的总结(转载)
1.关于enum的定义 enum Fabric { Cotton = 1, Silk = 2, Wool = 4, Rayon = 8, Other = 128 } 2.符号名和常数值的互相转换 ...
- C/C++使用心得:enum与int的相互转换
如何正确理解enum类型? 例如: enum Color { red, white, blue}; Color x; 我们应说x是Color类型的,而不应将x理解成enumeration类型,更不应将 ...
- 【转】C/C++使用心得:enum与int的相互转换
https://blog.csdn.net/lihao21/article/details/6825722 如何正确理解enum类型? 例如: enum Color { red, white, blu ...
- [.net 面向对象编程基础] (23) 结束语
[.net 面向对象编程基础] (23) 结束语 这个系列的文章终于写完了,用了半个多月的时间,没有令我的粉丝们失望.我的感觉就是一个字累,两个字好累,三个字非常累.小伙伴们看我每篇博客的时间就知道 ...
- C语言常见易错题集(分析及解答)(仅可用于交流,勿用于商业用途)
1.能正确表示a和b同时为正或同时为负的逻辑表达式是( D ). A.(a>=0||b>=0)&&(a<0||b<0) B.(a> ...
- C# FlagAttriute 的 小妙招
FlagAttriute ,指示可将枚举视为位域(即一组标志). 官网中文解说:https://docs.microsoft.com/zh-cn/dotnet/api/system.flagsattr ...
随机推荐
- (转)RTSP协议详解
转自:https://www.cnblogs.com/lidabo/p/6553212.html RTSP简介 RTSP(Real Time Streaming Protocol)是由Real ...
- 1091 Acute Stroke (30)(30 分)
One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the re ...
- Source insight 支持汇编
把uboot代码添加到SI的项目里面,打开*.S的文件的时候,发现还是黑白色的,感觉很不舒服,我使用的SI的版本是: ver 3.50,通过百度,找到了解决的办法,方法如下: 1:想让*.s 或者 * ...
- Eclipse常用配置(1)
1.代码自动提示 在我们忘记方法名或者想偷懒时,代码自动提示很管用.不过Eclipse默认是输入"."后才会出现包或类成员的提示,也就意味着我们必须先输入一个完整的类名,提示才能出 ...
- iOS端IM开发从入门到填坑
让App聊起来 IM开发从入门到填坑Demo IM的实现方式 拿来主义,使用第三方IM服务 IM的第三方服务商国内有很多,底层协议基本上都是基于TCP的,类似有网易云信.环信.融云.极光IM.Le ...
- CF-845A
A. Chess Tourney time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- 阿里云服务器CentOS7中Tomcat8.x启动慢问题解决记录
公司服务器刚换CentOS7,在内部的刀片机上一直跑的很溜,迁移到阿里云上后Tomcat启动竟然要6.7分钟!这还了得. 且日志上无任何错误,在日志中查看到如下信息: Log4j:[2015-10-2 ...
- Object有哪些公用的方法?
Object是所有类的父类,任何类都默认继承Object. public class Demo { public static void main(String[] args) { Object ob ...
- json字符串与json对象之间的转换
字符串转对象(strJSON代表json字符串) var obj = eval(strJSON); (运用时候需要除了eval()以外需要json.js包) var obj = strJSON. ...
- Sharepoint2013搜索学习笔记之设置sharepoint网站内容源(五)
第一步,进入管理中心,点击管理应用程序,点击search service 应用程序进入到搜索管理配置页面,点击内容源 第二步,点击新建内容源,给内容源命名,在爬网内容类型中选sharepoint网站, ...