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

简介:

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

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

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

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

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

比如用8位byte字段为例:

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

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

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

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

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

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

举个例子:

[Flags]
    enum Deliver : byte
    {
        CND = 0x01,
        PJS = 0x02,
        SND = 0x04,
        PJN = 0x08,
        Airport = 0x16,
        EMS = 0x32
    }

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

 

 

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

 

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

来做强大的组合功能。

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

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

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

相关文章
|
SQL 安全 前端开发
来来来开小灶了,年后求职和跳槽的看过来,悄悄的看悄悄的收藏
面试官,您好我叫(XXX),今天来公司面试 JAVA开发工程师,之前在(XXX 公司)任职,从事这一行已经有(几)个年头了。这几年开发,主要接触的项目包括(你做过的项目!)等。在开发过程中,也用过好些框架,比如∶ springboot、springcloud、springmvc、spring、Mybatis等技术框架。熟练掌握框架之间的整合技术。有时候因为项目需求或是为了开发的高效性,自己我会研究一些技术,使用一些常用的主流 Java技术,例如∶(吹!用没用过不重要,主要是就是英文的!)。前端的技术也研究过一些。如(原生的、框架啊都往上整!)
165 0
来来来开小灶了,年后求职和跳槽的看过来,悄悄的看悄悄的收藏
|
UED
挖一挖贝塞尔曲线那些事(一)
挖一挖贝塞尔曲线那些事
156 0
挖一挖贝塞尔曲线那些事(一)
|
iOS开发
挖一挖贝塞尔曲线那些事(二)
挖一挖贝塞尔曲线那些事
109 0
挖一挖贝塞尔曲线那些事(二)
|
iOS开发 UED
挖一挖贝塞尔曲线那些事
贝塞尔曲线的最初设计是服务于工业设计,尤其应用与汽车曲线设计。随着计算机画图的应用广泛,若想在计算机上画出平滑精准的曲线并不是一件容易的事,贝塞尔曲线解决了这样的问题,贝塞尔虚线通过起始点与结束点来确定曲线的首尾,通过若干个控制点来确定曲线的走向。由于其由法国工程师皮埃尔·贝塞尔广泛推广,因此这种曲线被命名为贝塞尔曲线。
135 0
|
安全 物联网 大数据
高考之后,切勿重蹈徐玉玉的悲剧
一年一度的高考日已结束,莘莘学子也将面临“高考后的综合选择症”,因为面临查成绩、填志愿、选大学。与此同时,也面临着各种信息来源,如亲朋好友的建议、莫名的电话短信、网上的信息等等;让我们分不清孰是孰非、真真假假。
1142 0
|
Java 程序员 Spring
Java开发程序员遇危机,才31竟遭公司嫌弃,网友:还拿着6k等死?
程序员会有中年危机,一个很大的因素来自:我们曾经引以为傲、赖以生存的开发技术会被淘汰。而学习新开发技术成本太高。看着快速崛起的年轻人,不免使人心生:廉颇老矣的感慨。
1164 0
|
程序员
是什么原因程序员再次倒下——程序员防猝死指南
今天下午,这个视频在技术群里疯传,据传是一位24岁的程序员在工作中猝死,在为他惋惜的同时,希望借助这个事情来为大家的健康敲一个响钟。
1019 0
|
程序员
又一个程序员倒下-程序员防猝死指南
今天下午,这个视频在技术群里疯传,据传是一位24岁的程序员在工作中猝死,在为他惋惜的同时,希望借助这个事情来为大家的健康敲一个响钟。
1410 0
因为夫妻不同姓氏的尴尬问题
image.png 西方人结婚之后女方往往都会改成男方的姓氏,所以别人知道已婚夫妇的其中一人的姓氏之后就会默认另一个也是这个姓氏,之后称呼俩人的时候就直接Mr and Mrs xxx 就完了。
875 0