c#中FlagsAttribute属性如何在枚举中的使用

  介绍

今天就跟大家聊聊有关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属性如何在枚举中的使用“> </p> <p class=看完上述内容,你们对c#中FlagsAttribute属性如何在枚举中的使用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

c#中FlagsAttribute属性如何在枚举中的使用