ahjesus C# Flags 位域略说
class Program {
[Flags]
public enum Week {
[Description("星期一")]
Monday = << ,//
[Description("星期二")]
Tuesday = << ,//
[Description("星期三")]
Wednesday = << ,//
[Description("星期四")]
Tursday = << ,//
[Description("星期五")]
Friday = << ,//
[Description("星期六")]
Saturday = << ,//
[Description("星期日")]
Sunday = << //
}
static void Main(string[] args) {
//1.|表示两边求并集(元素相加,相同元素只出现一次)
Week week = Week.Wednesday | Week.Monday | Week.Monday | Week.Tuesday;//Monday,Tuesday,Wednesday
//2.&表示两边是否其中一个是另外一个的子集,如果是返回子集,否则返回0
//week = Week.Monday & week;//Monday
//week = (Week.Sunday | Week.Monday | Week.Tuesday) & week;//Monday,Tuesday
//week = Week.Sunday & week;//0
//出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
//3.^表示从两者的并集中去除两者的交集
//week = Week.Monday ^ Week.Monday;//0
//week = (Week.Monday | Week.Tuesday) ^ (Week.Tuesday | Week.Wednesday);//Monday,Wednesday
//4.~表示取补,按二进制每4位一组,不足4位最左边补0,然后1变0,0变1,用法主要和&一起使用去除其中的某个元素
//week = ~Week.Wednesday;//-5
//week = week & (~Week.Monday); //Monday,Tuesday
//存入数据库可以转换为int,从数据库中读出来可以转换为枚举
//week = Week.Monday | Week.Tuesday;
//int i = (int)week;//3
//week = (Week)Enum.Parse(typeof(Week), "3");//Monday,Tuesday
NameValueCollection nvc = GetNVCFromEnumValue(typeof(Week));
foreach (string key in nvc.AllKeys)
{
Console.WriteLine(key + ":" + nvc[key]);
}
Console.ReadKey();
}
/// < summary>
/// 从枚举类型和它的特性读出并返回一个键值对
/// < /summary>
/// < param name="enumType">Type,该参数的格式为typeof(需要读的枚举类型)< /param>
/// < returns>键值对< /returns>
public static NameValueCollection GetNVCFromEnumValue(Type enumType) {
NameValueCollection nvc = new NameValueCollection();
Type typeDescription = typeof(DescriptionAttribute);
System.Reflection.FieldInfo[] fields = enumType.GetFields();
string strText = string.Empty;
string strValue = string.Empty;
foreach (FieldInfo field in fields) {
if (field.FieldType.IsEnum) {
strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString();
object[] arr = field.GetCustomAttributes(typeDescription, true);
if (arr.Length > ) {//出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
DescriptionAttribute aa = (DescriptionAttribute)arr[];
strText = aa.Description;
}
else {
strText = field.Name;
}
nvc.Add(strText, strValue);
}
}
return nvc;
}
}
ahjesus C# Flags 位域略说的更多相关文章
- Socket编程实践(10) --select的限制与poll的使用
select的限制 用select实现的并发服务器,能达到的并发数一般受两方面限制: 1)一个进程能打开的最大文件描述符限制.这可以通过调整内核参数.可以通过ulimit -n(number)来调整或 ...
- C# 位域[flags] 转
C# 位域[flags] .NET中的枚举我们一般有两种用法,一是表示唯一的元素序列,例如一周里的各天:还有就是用来表示多种复合的状态.这个时候一般需要为枚举加上[Flags]特性标记为位域,例如: ...
- [转]C# 位域[flags]
.NET中的枚举我们一般有两种用法,一是表示唯一的元素序列,例如一周里的各天:还有就是用来表示多种复合的状态.这个时候一般需要为枚举加上[Flags]特性标记为位域,例如: [Flags] enu ...
- C# 位域[flags]
.NET中的枚举我们一般有两种用法,一是表示唯一的元素序列,例如一周里的各天:还有就是用来表示多种复合的状态.这个时候一般需要为枚举加上[Flags]特性标记为位域,例如: [Flags] enu ...
- C/C++ 位域知识小结
C/C++ 位域知识小结 几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存 ...
- c# 枚举基础有[flags]和没有的的区别
枚举提供成组的常数值,它们有助于使成员成为强类型以及提高代码的可读性.在 C# 中,使用 enum 来声明枚举. 枚举分为简单枚举和标志枚举两种. 基本语法示例 enum Day { Sun, Mon ...
- c#中[Flags] 枚举类型定义问题_百度知道
[Flags]的微软解释是“指示可以将枚举作为位域(即一组标志)处理.”其实就是在编写枚举类型时,上面附上Flags特性后,用该枚举变量是既可以象整数一样进行按位的“|”或者按位的“&”操作了 ...
- Expo大作战(三十一)--expo sdk api之Payments(expo中的支付),翻译这篇文章傻逼了,完全不符合国内用户,我只负责翻译大家可以略过!
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- C#枚举中使用Flags特性
.NET中的枚举我们一般有两种用法,一是表示唯一的元素序列:还有就是用来表示多种复合的状态.这个时候一般需要为枚举加上[Flags]特性标记为位域,这样我们就可以用"或"运算符组合 ...
随机推荐
- [转]优秀Python学习资源收集汇总
Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl ...
- shell 复习
grep -v zip$ -v 逻辑否 $以zip结尾 (^开头) -n str不空,-z str 空
- POJ 2853 Sequence Sum Possibilities
Sequence Sum Possibilities Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5537 Accep ...
- 高效的INSERT INTO SELECT和SELECT INTO
1.INSERT INTO SELECT,目标表必须存在,才可批量插入 INSERT INTO 目标表Table(field1,field2,field2,...) SELECT value1,val ...
- POJ 2887 Big String(块状链表)
题目大意 给一个字符串,长度不超过 106,有两种操作: 1. 在第 i 个字符的前面添加一个字符 ch 2. 查询第 k 个位置是什么字符 操作的总数不超过 2000 做法分析 好多不同的做法都可以 ...
- Using the Cordova Camera API
使用ionic开发一款android或ios应用,估计少不了使用到Camera API,这里记录下使用过程. 创建空的ionic应用 ionic start myTabs tabs 通过cd demo ...
- [原]如何在Android用FFmpeg+SDL2.0解码图像线程
关于如何在Android上用FFmpeg+SDL2.0解码显示图像参考[原]如何在Android用FFmpeg+SDL2.0解码显示图像 ,关于如何在Android使用FFmpeg+SDL2.0解码声 ...
- MVC5入门
http://www.cnblogs.com/youring2/p/mvc-5-examining-the-edit-methods-and-edit-view.html
- Vectoroid
Use cases Drawing (sketch, illustrations, cartooning, etc). Diagramming (any sort of chart with obje ...
- ruby -- 进阶学习(六) devise修改邮件发送者邮箱
在config/environment.rb/development.rb或者config/environment/production.rb中, 简单示范例子: Text03::Applicatio ...