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¤t_day)==current_day) /*等同 (meeting_days¤t_day)!=0*/ /*等同 meeting_days.HasFlag(current_day)*/ { //出现 Console.WriteLine("出现"); } else if ((unmeeting_days¤t_day)==current_day) { //隐藏 Console.WriteLine("隐藏"); }
这样的好处,可方便操作定义的 meeting_days 和 unmeeting_days 日期集合,而不需要改动其他代码块。对于集合的操作
//添加操作 meeting_days |= Days.Wednesday; //移除操作 meeting_days ^= Days.Wednesday;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!