C#中FlagsAttribute属性在enum中的应用

原创 2016年08月30日 18:16:29

Net C#中枚举的声明格式如下所示:

[attributes] [modifiers] enum identifier [:base-type] {enumerator-list} [;]
FlagsAttribute属性就是枚举类型的一项可选属性。它的主要作用是可以将枚举作为位域处理(P.S. C#不支持位域)。所谓位域是单个存储单元内相邻二进制位的集合。通过为枚举添加这个属性,可以改变枚举的一些行为来满足我们的需要。

enum MyFlags { Flag1, Flag2, Flag3, Flag4};

MyFlags myFlag = MyFlags.Flag2 | MyFlags.Flag3;

Console.WriteLine(myFlag);//Flag4
 因为对于整数来说,| 操作就是将其转化为二进制再进行或运算。Flags.Flag2 | Flags.Flag3做的工作实际上是 0001 | 0010 = 0011 = 3再转换成(MyFlags)3就是Flag4了

如果枚举声明如下:

[FlagsAttribute]
enum MyFlags{
     Flag1 = 0,    //000
     Flag2 = 1,    //001
     Flag3 = 2,    //010
     Flag4 = 4     //100
};
则上述结果为Flag2,Flag3,这样做的意义在于我们可以实现“或”的关系。
就上例而言,myFlag可以更直观的表现为011,因此当我们想要检验它满足哪个枚举值时我们可以使用&操作:

if((myFlag & MyFlags.Flag2) == MyFlags.Flag2)
{
     Console.WriteLine("true");
}
if((myFlag & MyFlags.Flag3) == MyFlags.Flag3)

{
     Console.WriteLine("true");
}
011&001 = 001,011&010 = 010,因此这两个if都会成立,这就是这种枚举的意义吧。另外我们应当注意默认初始化的myFlag的值为0,与其作&运算不会有任何结果。

版权声明:本文为博主原创文章,未经博主允许不得转载。

C#枚举中使用Flags特性

如果对一个值可以包含多个,那么可以使用枚举,加上Flags 本文告诉大家如何写一个 Flags。...
  • lindexi_gd
  • lindexi_gd
  • 2017年03月07日 09:07
  • 1189

C#的Enum中Flags的用法

介绍 Flags关键字允许我们在使用.net 枚举变量时,使用多个组合值   使用演示      1     [Flags]  2     enum We...
  • a363096s
  • a363096s
  • 2016年04月19日 23:51
  • 294

源码级调试C库

源码级调试C库。
  • astrotycoon
  • astrotycoon
  • 2016年09月25日 16:21
  • 927

热修复框架Tinker最完整讲解(01)——集成之路

转载请注明出处:http://blog.csdn.net/alpha58/article/details/74854680前言上个月我们的产品又更新了一个版本,当一个测试把产品上传了十几个应用市场的时...
  • Alpha58
  • Alpha58
  • 2017年07月08日 23:45
  • 1792

C#中enum的总结 .

1、关于enum的定义 enum Fabric { Cotton = 1, Silk = 2, Wool = 4, Rayon = 8, Other = 128 } 2、符号...
  • Baple
  • Baple
  • 2014年02月20日 09:27
  • 2859

C#--反射使用 Go!--BindFlags的作用

BindFlags是什么? 我一般想知道这种问题,都会去Google一下,看一下MSDN上给的文档. (如果你想练习英语系列—英文版文档=>点击这里过去)(中文最方便系列–中文版文档...
  • qq_32452623
  • qq_32452623
  • 2016年12月02日 23:08
  • 2034

2-23 TCP网络程序设计

1.  TCP编程模型函数化         1.1  server端函数                 创建socket——>socket();                 绑定地址   ——...
  • elvinsys
  • elvinsys
  • 2016年09月14日 10:54
  • 152

Linux开发二十三_opencv移植

opencv是一个开放源代码的机器视觉库,它是基于c/c++开发的,可用与计算机视觉、图像处理、模式识别和跟踪等等。...
  • huang20083200056
  • huang20083200056
  • 2017年04月23日 01:47
  • 269

枚举 | 利用DescriptionAttribute定义枚举值的描述信息

我们知道System.ComponentModel命名空间下有个名为DescriptionAttribute的类用于指定属性或事件的说明,我所调用的枚举值描述信息就是DescriptionAttrib...
  • Fanbin168
  • Fanbin168
  • 2016年06月03日 09:58
  • 2180

c# Enum Flag 下使用 HasFlag() 函数的注意事项

[Flags] enum eTest { OK = 0 , Error1 = 1, Error2 = 2, Error3 = 4, } 在以上的Enum中 , 我们在判断一个 eTe...
  • norsd
  • norsd
  • 2013年06月10日 12:22
  • 3488
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#中FlagsAttribute属性在enum中的应用
举报原因:
原因补充:

(最多只允许输入30个字)