enum flags 枚举Flags标示 位运算符
C#位运算 详见:http://wenku.baidu.com/link?url=4KUNkwuVTm8dwhmPLXeyYytmnDOJnmLG1L2C77kP-rY0On33ksQxwchoTlqhHd4j41cRk1_3UK7amfR_fWh0Hh1EroSy0y-CgExegjZJBbS
--------------------------------

Flags关键字允许我们在使用.net枚举变量时,使用多个组合值,多个值的赋值方法是使用关键字“|”,
即WeekDays weekdays=WeekDays.Monday | WeekDays.Tuesday;
判断枚举是否具有该值:if( weekdays | WeekDays.Monday!=0) 说明是否包含该值
【http://www.cnblogs.com/kingmoon/archive/2011/12/11/2284319.html】
介绍
Flags关键字允许我们在使用.net 枚举变量时,使用多个组合值
使用演示

2 enum WeekDays
3 {
4 //注意: 这里不要将Sunday设置为0x0,至于为什么留给大家思考
5 Monday = 0x1,
6 Tuesday = 0x2,
7 Wednesday = 0x4,
8 Thursday = 0x8,
9 Friday = 0x10,
10 Saturday = 0x20,
11 Sunday = 0x40
12 }

只需要在Enum上使用上[Flags]标签即可标记为可组合的枚举.下面是简单的用法:

2 {
3 /************Kingmoon Lab 之 enum flags 语法*********************/
4 /*用'|'将各个枚举值分开即可*/
5 WeekDays wds = WeekDays.Monday | WeekDays.Sunday | WeekDays.Tuesday;
6 Console.WriteLine("我这3天要来大姨妈:"+wds);
7 /* 我们来看看计算过程:
8 * 或运算:
9 0000 0001 --星期一 0x1
10 或 0100 0000 --星期六 0x20
11 或 0000 0010 --星期二 0x2
12 = 0100 0011 = 67
13 *换句话说: 某个位是1就代表了这个位上的值在枚举中存在
14 */
15 Console.WriteLine("这3天组合Int为: "+(int)wds);
16 /*利用上面规则来判断枚举值中是否包含某个枚举值就轻而易举*/
17 if ((wds & WeekDays.Monday) != 0)
18 Console.WriteLine("星期一是其中一天");
19 if ((wds & WeekDays.Saturday) == 0)
20 Console.WriteLine("星期六不是其中一天");
21 }

运行结果
enum flags 枚举Flags标示 位运算符的更多相关文章
- 【C#进阶系列】15 枚举类型和位标志
实际上本章就只讲枚举类型,因为位标志本来就可以当做一个特殊的枚举类型. 关于枚举类型 枚举类型是一种消灭魔法数字的好方法,使程序更容易编写,阅读和维护. 枚举类型是值类型,然而有别于其它值类型,枚举类 ...
- [CLR via C#]15. 枚举类型和位标志
一.枚举类型 枚举类型(enumerated types)定义了一组"符号名称/值"配对. 例如,以下Color类型定义了一组符号,每个符号都标识一种颜色: internal en ...
- <NET CLR via c# 第4版>笔记 第15章 枚举类型和位标志
15.1 枚举类型 枚举定义的符号是常量值. C#编译器编译时,会用数值替换符号,不再引用定义了符号的枚举类型.可能会出现一些版本问题. Enum.IsDefined(Type enumType, o ...
- 重温CLR(十一) 枚举类型、位标志和数组
枚举类型 枚举类型(enumerated types)定义了一组"符号名称/值"配对.例如,以下Color类型定义了一组符号,每个符号都标识一种颜色: internal enum ...
- javascript运算符——位运算符
× 目录 [1]二进制 [2]非 [3]与[4]或[5]异或[6]左移[7]右移[8]>>>[9]应用 前面的话 位运算符是非常底层的运算,由于其很不直观,所以并不常用.但是,其速度 ...
- swift:高级运算符(位运算符、溢出运算符、优先级和结合性、运算符重载函数)
swift:高级运算符 http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和 ...
- Java的位运算符实例——与(&)、非(~)、或(|)、异或(^)
一.Java的位运算符实例——与(&).非(~).或(|).异或(^) 1.与(&) 0 & 2 = 0 0 0 0 0 1 0 0 1 0 2.非(~) ~0 = 7 0 0 ...
- PHP的按位运算符是什么意思
按位运算符是什么意思? 按位运算符(Bitwise Operators)是用于对涉及单个位操作的位模式或二进制数字执行位操作的运算符. 按位运算符可以用于: 1.通信堆栈,其中标头中的各个位附加到数据 ...
- java的布尔运算符和位运算符
1.布尔运算符 && 逻辑与: || 逻辑或: != 不等于: 三元操作符:?: :表达式为 condition?expression1:expression2(当条件为真时 ...
随机推荐
- hdu 2966 In case of failure k-d树
题目链接 给n个点, 求出每个点到离它最近的点的距离. 直接建k-d树然后查询就可以 感觉十分神奇... 明白了算法原理但是感觉代码还不是很懂... #include <bits/stdc++ ...
- cocos2d-x中的Box2D物理引擎
在Cocos2d-x中集成了2个物理引擎,一个是Chipmunk,一个是Box2D.前者是用C语言编写的,文档和例子相对较少:Box2D是用C++写的,并且有比较完善的文档和资料.所以在需要使用物理引 ...
- C语言基础05
二维数组的定义: 数据类型 数组名称 [ 常量表达式1 ] [ 常量表达式2 ] = {.....} int a[ 2 ][ 3 ] ={ {4,5,6}, {7,8,0}, //或者{7} 后面 ...
- C语言的本质(20)——预处理之二:条件预处理和包含头文件
我们可以通过定义不同的宏来决定编译程序对哪些代码进行处理.条件编译指令将决定那些代码被编译,而哪些是不被编译的.可以根据表达式的值或者某个特定的宏是否被定义来确定编译条件. 条件编译可分为三种情况,按 ...
- OSCHina技术导向:Java电子商务平台OFBiz
OFBiz 是开放的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级.跨平台.跨数据库.跨应用服务器的多层.分布式电子商务类WEB应用系统的框 ...
- uva10815 by sixleaves
题目很简单.其实stringstream就的用法和iosteam差不多,所以学习起来是很简单的.stringstream类里面有一个string缓存,str()和str(string)成员函数.前者用 ...
- 无限的路_hdu_2073(AC).java
无限的路 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- js添加、删除Cookie
//cookie function addCookie(objName, objValue, objHours) { //添加cookie var str = objName + "=&qu ...
- C#基础:事件(一) 【转】
前面简要介绍了委托的基本知识,包括委托的概念.匿名方法.Lambda表达式等,现在讲讲与委托相关的另一个概念:事件. 事件由委托定义,因为事件的触发方(或者说发布方)并不知道事件的订阅方会用什么样的函 ...
- [代码]Java后台推送消息到IOS前端
PayLoad payLoad = new PayLoad(); payLoad.addAlert("test"); //手机端的提示消息 payLoad.addBadge( ...