1. 程式人生 > >Flags列舉型別轉換、判斷和提取

Flags列舉型別轉換、判斷和提取

列舉類:
 [Flags]
    public enum ChooseScheduleDay
    {
        /// <summary>
        /// 週一
        /// </summary>
        Monday = 1,

        /// <summary>
        /// 週二
        /// </summary>
        Tuesday = 2,

        /// <summary>
        /// 週三
        /// </summary>
        Wednesday = 4,

        /// <summary>
        /// 週四
        /// </summary>
        Thursday = 8,

        /// <summary>
        /// 週五
        /// </summary>
        Friday = 16,

        /// <summary>
        /// 週六
        /// </summary>
        Saturday = 32,

        /// <summary>
        /// 週日
        /// </summary>
        Sunday = 64,

        /// <summary>
        /// 法定工作日
        /// </summary>
        LegalWorkingDay = Monday | Tuesday | Wednesday | Thursday | Friday,
        
    }
獲取列舉值集合方法:
        /// <summary>
        /// 獲取列舉集合
        /// </summary>
        /// <returns></returns>
        protected virtual string[] GetEnumList()
        {
            return Enum.GetNames(typeof(ChooseScheduleDay));
        }
根據資料庫中取出Flags列舉值獲取出包含的列舉值:
/// <summary>
/// 獲取包含的工作日(星期幾)
/// </summary>
/// <param name="scheduleDay">要判斷的列舉</param>
/// <returns>列舉集合</returns>
protected virtual List<string> GetScheduleDays(ChooseScheduleDay scheduleDay)
{
      //存放工作日(星期幾)的集合
    var hasScheduleDayList = new List<string>();
    foreach (var item in GetEnumList())
    {
        var enumScheduleDay = ((ChooseScheduleDay)Enum.Parse(typeof(ChooseScheduleDay), item));
        var has = ((scheduleDay & enumScheduleDay) != 0);
       if (has)
        {
           hasScheduleDayList.Add(item);
        }
     }
   return hasScheduleDayList;
}
使用方法:

注:

//entity.ChooseScheduleDay  是從資料庫讀取出來的值 該值儲存於資料庫的時候是int 儲存的是列舉值的(num)值相加的和。
//hasScheduleDays 結果=List<string> 一個字串陣列。
var hasScheduleDays = GetScheduleDays(entity.ChooseScheduleDay);