简要介绍C 简要介绍长城
创始人
2024-05-08 03:51:14
0

C#位域主要用于.net里面对于某一个事物有多种混合状态时使用,单一的枚举更的在事物只具有单一属性时使用。为了更好的实现混合状态,我们可以在枚举加上C#位域标签。下面的这个就是我们在本文中用到的实例:

  1. [Flags]  
  2. public enum Week  
  3. {  
  4. [Description("星期一")]  
  5. Monday = 1 < <  0,  
  6. [Description("星期二")]  
  7. Tuesday = 1 < <  1,  
  8. [Description("星期三")]  
  9. Wednesday = 1 < <  2,  
  10. [Description("星期四")]  
  11. Tursday = 1 < <  3,  
  12. [Description("星期五")]  
  13. Friday = 1 < <  4,  
  14. [Description("星期六")]  
  15. Saturday = 1 < <  5,  
  16. [Description("星期日")]  
  17. Sunday = 1 < <  6  

位域支持的运算符

1. “|”:表示两边求并集(元素相加,相同元素只出现一次)

  1. Week week = Week.Tuesday | Week.Monday | Week.Monday;  
  2. MessageBox.Show(Convert.ToString(week)); 

这段代码的结果就是 Monday,Tuesday

2. “&”:表示两边是否其中一个是另外一个的子集,如果是返回子集,否则返回0(如果其中一个包含另外一个,返回被包含的,否则返回0)

  1. week = Week.Monday & week;  
  2. MessageBox.Show(week.ToString());与week = week & Week.Monday;  
  3. MessageBox.Show(week.ToString()); 

上面这两段代码的结果是相同的,如果week的初始值为:Monday,Tuesday,返回的结果为:Monday

3.“^”:表示从两者的并集中去除两者的交集(把两个的元素合并到一起,如果两个中有公共元素,要将这个公共元素从合并的结果中去除)

  1. week = (Week.Monday | Week.Wednesday)^ (Week.Tuesday | Week.Monday);  
  2. MessageBox.Show(week.ToString());  
  3. week = (Week.Monday | Week.Wednesday) ^ (Week.Tuesday | Week.Sunday);  
  4. MessageBox.Show(week.ToString()); 

上面两个返回的结果应该为:Tuesday,Wednesday 和 Monday,Tuesday,Wednesday,Sunday

4.“~”:表示取反,返回的结果我还不知道应该是什么,以后再查一下。用法主要和“&”一起使用,例如:去除其中的某个元素

  1. week = Week.Tuesday | Week.Monday | Week.Wednesday;  
  2. week = week &(~Week.Monday);  
  3. MessageBox.Show(week.ToString()); 

上面返回的结果为:Tuesday,Wednesday

正逆转化

上面的内容存在数据库时我们可能为了简单只存取数字即可,例如:1表示Monday,3表示Monday,Tuesday。我们可以根据数据库里面的值方便获取存储的内容,代码如下:

  1. week = Week.Monday  | Week.Tuesday;  
  2. MessageBox.Show(Convert.ToString((int)week));  
  3. week = (Week)Enum.Parse(typeof(Week), "10");  
  4. MessageBox.Show(week.ToString()); 

返回的结果为:3 和 Tuesday,Tursday

获取Description标签内容

我们既然可以给里面的值加上Description,就可以在程序中获取到这个内容,至于用途,大家自己看吧,东西摆出来,大家自己随便怎么用,下面的代码是从网上找到的,内容如下:

  1. /// < summary>  
  2. /// 从枚举类型和它的特性读出并返回一个键值对  
  3. /// < /summary>  
  4. /// < param name="enumType">Type,该参数的格式为typeof(需要读的枚举类型)< /param>  
  5. /// < returns>键值对< /returns>  
  6. public static NameValueCollection GetNVCFromEnumValue(Type enumType)  
  7. {  
  8. NameValueCollection nvc = new NameValueCollection();  
  9. Type typeDescription = typeof(DescriptionAttribute);  
  10. System.Reflection.FieldInfo[] fields = enumType.GetFields();  
  11. string strText = string.Empty;  
  12. string strValue = string.Empty;  
  13. foreach (FieldInfo field in fields)  
  14. {  
  15. if (field.FieldType.IsEnum)  
  16. {  
  17. strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString();  
  18. object[] arr = field.GetCustomAttributes(typeDescription, true);  
  19. if (arr.Length > 0)  
  20. {  
  21. DescriptionAttribute aa = (DescriptionAttribute)arr[0];  
  22. strText = aa.Description;  
  23. }  
  24. else 
  25. {  
  26. strText = field.Name;  
  27. }  
  28. nvc.Add(strText, strValue);  
  29. }  
  30. }  
  31. return nvc;  

C#位域(flags)的相关知识就介绍到这里。

【编辑推荐】

  1. 看看C# Hook 如何实现
  2. 学习C#虚函数实例演示
  3. 一个C#数据访问XML的例子
  4. C#特性之通俗演义
  5. 探寻C# 3.5新特性

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...