c# 位与运算符&简单实现复选框功能【实际应用】

 

  • 定义星期枚举:
 [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 + "  ";
                        }
                    }

 

posted @ 2021-07-06 12:33  低调码农哥!  阅读(232)  评论(0编辑  收藏  举报