- 定义星期枚举:
[Flags] public enum DateEnum { /// <summary> /// 星期一 /// </summary> Monday = 0x1, //1 /// <summary> /// 星期二 /// </summary> Tuesday = 0x2,//2 /// <summary> /// 星期三 /// </summary> Wednesday = 0x4,//4 /// <summary> /// 星期四 /// </summary> Thursday = 0x8,//8 /// <summary> /// 星期五 /// </summary> Friday = 0x10,//16 /// <summary> /// 星期六 /// </summary> Saturday = 0x20,//32 /// <summary> /// 星期日 /// </summary> Sunday = 0x40 //64 }
- 实体类应用:
/// <summary> /// -1不限 1星期一 2星期二 4星期三 8星期四 16星期五 32星期六 64星期日(多选) /// </summary> [Description("0不限 1星期一 2星期二 4星期三 8星期四 16星期五 32星期六 64星期日(多选)")] public DateEnum day { get; set; }
- 前端如果选中星期一、星期二,则需要传[1,2],后端获取值,方法如下
/// <summary> ///计算前端传过来的数组的组合值 /// </summary> /// <param name="list"></param> /// <returns></returns> public static int GetSum(this int[] lstNum) { int result = 0; if (lstNum!= null) { foreach (int item in lstNum) { if (item == 0) { return 0; } else if (!CheckItem(item)) { throw new System.Exception("非法的uint数据"); } result |= item; } } else { } return result; } static bool ChecItem(int num) { return num > 0 && (num & (num - 1)) == 0; }
- 判断值是否有改动:
if (model.day != (DateEnum)request.work_day.GetVal()) { ... }
- 数据库中存的是位的几个数之和,如库中存的是14,判断选中的是哪几个时,需要循环所有数,与14进行位与 运算,大于0,则表示存在。
string v1 = ""; Dictionary<int, string> dic = new Dictionary<int, string> { }; dic.Add(1, "周一"); dic.Add(2, "周二"); dic.Add(4, "周三"); dic.Add(8, "周四"); dic.Add(16, "周五"); dic.Add(32, "周六"); dic.Add(64, "周日"); foreach (var item in dic) { if ((item.Key & (int)model.work_day) > 0) { v1 += item.Value + " "; } }