zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    [转载] IE8+兼容小结
    vue添加,删除内容
    vue跳转的两种方法
    checked 完整版全选,单选,反选
    网页特殊符号HTML代码大全
    利用css 实现 视觉差效果
    css 自定义滚动条样式
    js 模拟键盘
    css 动画 transition和animation
    浅谈浏览器垃圾回收机制
  • 原文地址:https://www.cnblogs.com/Jean90/p/10370536.html
Copyright © 2011-2022 走看看