博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#枚举位运算操作
阅读量:4944 次
发布时间:2019-06-11

本文共 1191 字,大约阅读时间需要 3 分钟。

抛出预设问题

需要有一个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

你可能感兴趣的文章