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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM