正确使用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 ...
随机推荐
- c# json 排版
public static string PraseToJson(string json) { try { JsonSerializer s = new JsonSerializer(); JsonR ...
- PS 滤镜— — 万花筒效果
clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); I=imread ...
- 1034 Head of a Gang (30)(30 分)
One way that the police finds the head of a gang is to check people's phone calls. If there is a pho ...
- poj3666序列对应——DP
题目:http://poj.org/problem?id=3666 很普通的DP,离散化(sort)一下即可: mn的求法很不错(比我原来开了mn[]……简洁). 代码如下: #include< ...
- JSP环境探针-当前电脑所有系统参数
1 <%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.u ...
- Ubuntu如何锁定分辨率
终于把Ubuntu的虚拟机装好了,但是分辨率没有1920*1080是什么鬼啊? 下面详细讲一下如何设置1920*1080的分辨率并设置,主要都是照着前辈的博客自己在操作一遍熟悉一下,嘿嘿. 1.安装v ...
- Post 提交用户名和密码, 用户自动登录,无需手动登录
public void AutoPost(string url,string domain, string userName) { AlipayProxy.UserReg.UserReg userRe ...
- sqlserver2012——EXCEPT差查询
代表第一个select查询结果与第二个select查询结果去除相交后的数据
- Js获取当前的日期和时间以及时间戳转化为时间
/** *获取当前时间 *format=1精确到天 *format=2精确到分 */ function getCurrentDate(format) { var now = new Date(); v ...
- Unity开发Android应用优化指南(下)
http://forum.china.unity3d.com/thread-27044-1-1.html 在Unity开发Android应用优化指南(上)一文中,从游戏性能,脚本等方面进行了分析和总结 ...