挖一挖C#中那些我们不常用的东西之系列(5)——FlagAttribute

简介: 原文:挖一挖C#中那些我们不常用的东西之系列(5)——FlagAttribute  说到FlagsAttribute,源自前几天看到了一小段代码,大概意思就是根据航班政策来返回哪些配送方式是否可用,根据这些是否可用 来隐藏或者开启界面的相关配送方式,如果大家订过机票可能知道配送方式有很多种,比如“无需打印行程单(PJN)”,“机场自取(Airport)”, “市内配送(CND)”,“快递(EMS)”等等。
原文: 挖一挖C#中那些我们不常用的东西之系列(5)——FlagAttribute

  说到FlagsAttribute,源自前几天看到了一小段代码,大概意思就是根据航班政策来返回哪些配送方式是否可用,根据这些是否可用

来隐藏或者开启界面的相关配送方式,如果大家订过机票可能知道配送方式有很多种,比如“无需打印行程单(PJN)”,“机场自取(Airport)”,

“市内配送(CND)”,“快递(EMS)”等等。

根据上面的逻辑就可以知道,配送方式是有两种状态,可用与不可用,在逻辑实现上,很容易就想到了bit位,每一个位代表一个配送方式,

0表示不可用,1表示可用,所以航班接口只要给一个数字就行了,我只需要判断bit位中哪些是1就行了。

比如用8位byte字段为例:

从图中可以看到,快递(EMS)是不可用的,那么怎么判断呢,其实也就17&32就ok了,如果为32,则说明可用,为0则不可用,其他

的判断可以用同样的手段。

上次看到的代码逻辑就这样了,不过毕竟在一个团队里面,水平参差不齐,用纯数字来&,|,^,最起码不是那么容易理解的,如果

配上枚举的话,可能就更完美了。

    说起枚举,其实就是编译器给我们的语法糖,本质上来说就是一个继承在Enum类型下的一个个const字段,既然是const,那

就天生具备(+,-,* ,/ ^,| &)这样常规的数学运算。

举个例子:

 1     [Flags]
 2     enum Deliver : byte
 3     {
 4         CND = 0x01,
 5         PJS = 0x02,
 6         SND = 0x04,
 7         PJN = 0x08,
 8         Airport = 0x16,
 9         EMS = 0x32
10     }

 

然后看看上面的Enum生成的IL代码。

 

 

可能有人会问,这里的“uint8” 是怎么回事,其实这个就是隐藏到枚举类型后面的真实的基元类型,可以用GetUnderlyingType来获取。

 

通常情况下,枚举只能显示一个状态,那么如果让枚举显示多个状态,这个时候就可以用FlagAttribute来标记,让标志位来处理枚举,

来做强大的组合功能。

举个例子:从图中航班政策返回的17的数字来看,我们知道Airport和CND是可用的,如果用了FlagAttribute标记后,这次我们不用担

心,直接将17转化为枚举即可。

从图中看到,经过枚举转换后,可能对程序员的理解以及记录log上面,更方便分析和追踪。

 

 

目录
相关文章
|
18天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
9天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
12天前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
1067 37
|
12天前
|
机器学习/深度学习 人工智能 搜索推荐
万字长文深度解析最新Deep Research技术:前沿架构、核心技术与未来展望
近期发生了什么自 2025 年 2 月 OpenAI 正式发布Deep Research以来,深度研究/深度搜索(Deep Research / Deep Search)正在成为信息检索与知识工作的全新范式:系统以多步推理驱动大规模联网检索、跨源证据。
827 56
|
10天前
|
文字识别 测试技术 开发者
Qwen3-VL新成员 2B、32B来啦!更适合开发者体质
Qwen3-VL家族重磅推出2B与32B双版本,轻量高效与超强推理兼备,一模型通吃多模态与纯文本任务!
713 11
|
3天前
|
人工智能 数据可视化 Java
Spring AI Alibaba、Dify、LangGraph 与 LangChain 综合对比分析报告
本报告对比Spring AI Alibaba、Dify、LangGraph与LangChain四大AI开发框架,涵盖架构、性能、生态及适用场景。数据截至2025年10月,基于公开资料分析,实际发展可能随技术演进调整。
289 4
下一篇
开通oss服务