挖一挖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上面,更方便分析和追踪。
挖一挖贝塞尔曲线那些事 贝塞尔曲线的最初设计是服务于工业设计,尤其应用与汽车曲线设计。随着计算机画图的应用广泛,若想在计算机上画出平滑精准的曲线并不是一件容易的事,贝塞尔曲线解决了这样的问题,贝塞尔虚线通过起始点与结束点来确定曲线的首尾,通过若干个控制点来确定曲线的走向。由于其由法国工程师皮埃尔·贝塞尔广泛推广,因此这种曲线被命名为贝塞尔曲线。
「 亲身经历 」 说到猝死,相信很多人都觉得离自己很遥远,那些事情只会发生在新闻里。土叔身为多年的码农,经常熬夜上线调试bug,自认为身强体壮,劳损丝毫不能伤吾身,却意外地经历了一次猝死惊魂的瞬间。
相关文章
- 串口助手(简洁版)上位机软件零基础教程( C# + visual studio2017 )(一)[通俗易懂]
- 使用C#创建WebService实例
- c#中executeNonQuery执行异常怎么处理_getchar的返回值
- c# mysql executenonquery_C#与数据库访问技术之ExecuteNonQuery方法
- C#索引器
- 【愚公系列】2023年01月 .NET CORE工具案例-使用pythonnet实现C#和Python的融合调用
- 【愚公系列】2023年01月 .NET/C#知识点-文件上传与下载
- 【愚公系列】2023年03月 .NET/C#知识点-匿名类的自动映射
- C#(.NET)数据访问连接、查询、插入等操作的封装类
- C#正则表达式分解和转换IP地址实例(C#正则表达式大全c#正则表达式语法)
- c#实现flv解析详解示例
- C#探秘系列(四)——GetHashCode,ExpandoObject
- MongoDB入门教程之C#驱动操作实例