介绍
今天就跟大家聊聊有关c#中FlagsAttribute属性如何在枚举中的使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
FlagsAttribute属性就是枚举类型的一项可选属性。它的主要作用是可以将枚举作为位域处理(注:c#不支持位域)。
所谓位域是单个存储单元内相邻二进制位的集合。
通过为枚举添加这个属性,可以改变枚举的一些行为来满足我们的需要。
enum MyFlags {Flag1、Flag2 Flag3, Flag4}; MyFlags myFlag=MyFlags。Flag2 | MyFlags.Flag3; Console.WriteLine (myFlag);//Flag4
因为对于整数来说,|操作就是将其转化为二进制再进行或运算.Flags。Flag2 |旗帜。Flag3做的工作实际上是0001 | 0010=0011=3再转换成(MyFlags) 3就是Flag4了
<>强如果枚举声明如下:强>
[FlagsAttribute] enum MyFlags { Flag1=0,//000 Flag2=1//001//010年Flag3=2 Flag4=4//100 };
则上述结果为Flag2, Flag3,这样做的意义在于我们可以实现“或”的关系。
就上例而言,myFlag可以更直观的表现为011,因此当我们想要检验它满足哪个枚举值时我们可以使用,操作:
如果(myFlag,MyFlags.Flag2)==MyFlags.Flag2) { Console.WriteLine (“true"); } 如果(myFlag,MyFlags.Flag3)==MyFlags.Flag3) { Console.WriteLine (“true"); }
011, 001=001011, 010=010,因此这两个如果都会成立,这就是这种枚举的意义吧。另外我们应当注意默认初始化的myFlag的值为0,与其作,运算不会有任何结果。
<强> c#使用特性(属性)来汉化枚举类强>
<强>一、新建枚举强>
公共enum CRUD { 创建、 检索、 更新, 删除 }
<强>二,新建特性类强>
公共静态字符串GetChinese(这个枚举值) { 类型objType=value.GetType (); 类型attrType=typeof (ChineseAttribute); FieldInfo字段=objType.GetField (value.ToString ());//利用反射找是否有【中国】特性 如果(field.IsDefined (attrType)) { 中国var=field.GetCustomAttribute(); 返回chinese.Chinese; }//没有定义中国特性,直接返回具体指 返回value.ToString (); }
<强>四,给枚举类添加特性强>
公共enum CRUD { (中国(“创建“)) 创建、 (中国(“读取“)) 检索、 (中国) 更新, 删除 }
<强>五、测试强>
静态void Main (string [] args) { List值=new List { MyEnum.CRUD.Create, MyEnum.CRUD.Delete, MyEnum.CRUD.Retrieve, MyEnum.CRUD.Update }; foreach (var项值) { Console.WriteLine (item.GetChinese ()); } Console.Read (); }
效果如下
看完上述内容,你们对c#中FlagsAttribute属性如何在枚举中的使用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。