【C#的Enum中Flags的用法】

 .NET中的枚举我们一般有两种用法,一是表示唯一的元素序列,例如一周里的各天;还有就是用来表示多种复合的状态。这个时候一般需要为枚举加上[Flags]特性标记为位域,例如:

	enum WeekDays
	{ 
		// 注意: 这里不要将Sunday设置为0x0,至于为什么留给大家思考
		Monday =  0x1,
		Tuesday =  0x2,
		Wednesday =  0x4,
		Thursday =  0x8,
		Friday =  0x10,
		Saturday =  0x20,         
        Sunday =  0x40
	}

这样我们就可以用"或"运算符组合多个状态,例如

	static  void TestEnumFlags()
	{
		/* ***********Kingmoon Lab 之 enum flags 语法******************** */
		/* 用'|'将各个枚举值分开即可 */
		WeekDays wds = WeekDays.Monday | WeekDays.Sunday | WeekDays.Tuesday;
		Console.WriteLine( " 我这3天要来大姨妈: "+wds);
		/*  我们来看看计算过程:
  * 或运算:
       0000 0001 --星期一 0x1
   或 0100 0000 --星期六 0x20
    或 0000 0010 --星期二 0x2
  =   0100 0011 = 67
  *换句话说: 某个位是1就代表了这个位上的值在枚举中存在                */
		Console.WriteLine( " 这3天组合Int为:  "+( int)wds);
		/* 利用上面规则来判断枚举值中是否包含某个枚举值就轻而易举 */
		if ((wds & WeekDays.Monday) !=  0)
			Console.WriteLine( " 星期一是其中一天 "); 
		if ((wds & WeekDays.Saturday) ==  0)
			Console.WriteLine( " 星期六不是其中一天 ");
		//(补充) 如果将某个值去掉的话可以按照原来采用这次方式
		/*  将星期一从枚举变量中去掉
   *  0100 0011
   * &1011 1111 (~WeekDays.Monday)取反
  * =0000 0011 这样就把星期一去掉啦!
   */ wds = wds & (~WeekDays.Monday);
		Console.WriteLine( " 去掉星期一后的效果:  "+wds);
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DAGUNIANGZHOU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值