c#枚举位运算操作

抛出预设问题

需要有一个npc需要在一周中的,周一,周二,周三会出现,其他时间不可见

解决问题

因为一周时间是固定的,所以创建枚举类型比较合适,如下

  enum Days { None, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, } 

根据需求直觉一般会这样处理

switch (Days)
{
    case Days.None:
        break;
    case Days.Sunday:
    case Days.Monday:
    case Days.Tuesday:
        // 出现
        break;
    case Days.Wednesday:
    case Days.Thursday:
    case Days.Friday:
    case Days.Saturday:
        // 隐藏
        break;
    default:
        break;
}

如果出现的时间改变,那么就需要变动 switch 块中的代码了,特别是如果时间变动是动态的,那么这样处理就很不方便了,这种情况下就可以使用位运算来处理这种问题

 Days /*出现日*/meeting_days = Days.Sunday | Days.Monday | Days.Thursday;
 Days /*隐藏日*/unmeeting_days = Days.Wednesday | Days.Thursday | Days.Friday | Days.Saturday;
 Days /*当前日*/current_day = Days.Monday;

 if ((meeting_days&current_day)==current_day)
 /*等同 (meeting_days&current_day)!=0*/
 /*等同 meeting_days.HasFlag(current_day)*/
 {
     //出现
     Console.WriteLine("出现");
 }
 else if ((unmeeting_days&current_day)==current_day)
 {
     //隐藏
     Console.WriteLine("隐藏");
 }

 

这样的好处,可方便操作定义的 meeting_days  和 unmeeting_days  日期集合,而不需要改动其他代码块。对于集合的操作

//添加操作
meeting_days |= Days.Wednesday;
//移除操作
meeting_days ^= Days.Wednesday;

 

转载于:https://www.cnblogs.com/Jean90/p/10370536.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值