在日常的开发工作当中,位枚举可能会被经常使用,如星期多选、租期多选等等,我们可以将多选字段做或运算,然后保存到数据库表的字段中,如 1 | 2 = 3(0001 | 0010 = 0011 = 3)。
一、定义位枚举(Flags)
只需要在枚举上添加FlagsAttribute特性
[Flags]
public enum C
{
[Description("a")]
a = 1 << 0,
[Description("b")]
b = 1 << 1,
[Description("c")]
c = 1 << 2,
[Description("所有")]
d = -1
}
注意事项:定义位枚举时,一定要保证值的二进制之间值做&运算为0,如 2的n次方。
为什么使用-1代表所有:1的二进制就是1的补码,相当于在n位中的二进制就是n个1组成。
2、位枚举的方法
在Nuget引入包Enums.Net或者在程序包管理控制台中输入Install-Package Enums.NET -Version 4.0.0。
常用方法:
1、HasFlag
//与HasAllFlags一样的
var c = C.a | C.b;
var h = C.c | C.a;
// var result = source.HasFlas(Targe)
// 如果source | Targe = Source 或者 Source & Targe = Targe
//则为true 否则为False,可以理解成Targe是Source的真子集
var b = c.HasFlag(c); // true
var d = c.HasFlag(C.a); // true
var e = c.HasFlag(C.c); // false
var f = c.HasFlas(h); // false
2、HasAnyFlags
var c = C.a | C.b;
var h = C.d | C.a;
// var result = source.HasFlas(Targe)
// source & targe != 0 则为true 否则为false
// 可以理解成source与targe不存在交集
//在开发当中,需要判断两条数据中字段是否存在冲突时
var e = c.HasAnyFlags(h); // true
var f = C.d.HasAnyFlags(c); // true;
3、FlagEnums.CombineFlags
var s = new List<C> { C.a, C.b, C.c};
// s中的元素做或(|)运算
var h = FlagEnums.CombineFlags(s);
var b = (int)h == 7; // true
4、FlagEnums.GetAllFlags
获取枚举中的全部枚举值,除-1外
var h = FlagEnums.GetAllFlags<C>(); // a | b | c
5、GetFlags
var h = FlagEnums.GetAllFlags<C>();
var h1 = h.GetFlags().ToList(); // 拆分 a | b | c
6、AsString(EnumFormat.Description)
// 获取描述
var h = C.d.AsString(EnumFormat.Description); // 所有
本博客Android APP 下载 |
![]() |
支持我们就给我们点打赏 |
![]() |
支付宝打赏 支付宝扫一扫二维码 |
![]() |
微信打赏 微信扫一扫二维码 |
![]() |
如果想下次快速找到我,记得点下面的关注哦!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2020-07-10 跨域问题服务端解决办法 Request header field Authorization is not allowed by Access-Control-Allow-Headers
2018-07-10 .net OADate 转javascript的Datetime js 5位 日期 转换
2017-07-10 (转载)开发人员必须用到的开发软件破解
2017-07-10 HTML5漫谈(7)——如何保护HTML5应用代码
2017-07-10 【转】使用Jasob混淆javascript代码
2016-07-10 SQL 查询数据库中所有表信息