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 @   低调码农哥!  阅读(250)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示