States字段使用规范有哪些
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,States字段使用规范有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。解决方式States对应位域枚举States
千家信息网最后更新 2025年02月22日States字段使用规范有哪些
States字段使用规范有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
解决方式
States对应位域枚举StatesFlags。
////// 数据状态枚举 /// [Flags] [DataContract] [EnumDescription("状态")] public enum StatesFlags { ////// 可用状态 /// [XmlEnum("1")] [EnumDescription("可用")] [EnumMember] Enabled = 1, ////// 停用状态 /// [XmlEnum("2")] [EnumDescription("停用")] [EnumMember] Disabled = 1 << 1, ////// 移除(相当于逻辑删除) /// [XmlEnum("4")] [EnumDescription("移除")] [EnumMember] Removed = 1 << 2, ////// 已确认(已经审核通过) /// [XmlEnum("8")] [EnumDescription("已确认")] [EnumMember] Confirmed = 1 << 3, ////// 锁定 /// [XmlEnum("16")] [EnumDescription("锁定")] [EnumMember] Locked = 1 << 4, ////// 锁定登录 /// [XmlEnum("32")] [EnumDescription("锁定登录")] [EnumMember] LockLogin = 1 << 5 }
业务模型使用方式
在业务模型中,需要关注模型的特定状态集,写入新的状态时使用模型中的States, 读取时每一个状态独立提供读取实现。如下图中IsRemoved状态 以后大家一看代码就知道这个模型到底有几个状态
////// 状态集,写 /// public StatesFlags States { get; set; } ////// 只读 /// public bool IsRemoved => States.HasFlag(StatesFlags.Removed);
StatesFlags的4个扩展方法
////// 数据状态枚举 /// public static class StatesFlagsExtends { ////// 设置可用 /// /// 状态 public static StatesFlags SetEnable(this StatesFlags states) { if (states.HasFlag(StatesFlags.Disabled)) states = states ^ StatesFlags.Disabled; if (!states.HasFlag(StatesFlags.Enabled)) states = states | StatesFlags.Enabled; return states; } ////// 设置停用 /// /// 状态 public static StatesFlags SetDisable(this StatesFlags states) { if (states.HasFlag(StatesFlags.Enabled)) states = states ^ StatesFlags.Enabled; if (!states.HasFlag(StatesFlags.Disabled)) states = states | StatesFlags.Disabled; return states; } ////// 移除状态 /// /// 状态 /// 要移除的状态 public static StatesFlags RemoveState(this StatesFlags states, StatesFlags state) { //也可以通过如下计算去除一个状态states = states & ~StatesFlags.Disabled; return states ^ state; } ////// 附加状态 /// /// 状态 /// 要附加的状态 public static StatesFlags AttachState(this StatesFlags states, StatesFlags state) { return states | state; } }
由于Enable和Disable是互斥的,所以对应有SetDisable、SetEnable 。其它非互斥状态 提供 AttachState、RemoveState用于附加或移除状态。 如出现新的状态在StatesFlags中添加,状态为位域枚举,使用连续的数字移位操作,增加代码可读性。
附扩展方式测试代码
[TestClass] public class StatesFlagsTest { [TestMethod] public void TestStatesExtends() { //赋初值 在用、锁定、移除 var state = StatesFlags.Enabled | StatesFlags.Locked | StatesFlags.Removed; //调用SetDisable方法,设为停用 state = state.SetDisable(); Assert.IsTrue(!state.HasFlag(StatesFlags.Enabled)); Assert.IsTrue(state.HasFlag(StatesFlags.Disabled)); //调用SetEnable方法,设为在用 state = state.SetEnable(); Assert.IsTrue(state.HasFlag(StatesFlags.Enabled)); Assert.IsTrue(!state.HasFlag(StatesFlags.Disabled)); //调用RemoveState方法,移除状态 state = state.RemoveState(StatesFlags.Locked); Assert.IsTrue(!state.HasFlag(StatesFlags.Locked)); Assert.IsTrue(state.HasFlag(StatesFlags.Removed)); //调用AttachState方法,附加状态 state = state.AttachState(StatesFlags.Confirmed); Assert.IsTrue(state.HasFlag(StatesFlags.Confirmed)); //直接调用方法,不赋值不能改变states的值 state.AttachState(StatesFlags.Locked); Assert.IsTrue(!state.HasFlag(StatesFlags.Locked)); } }
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
状态
方法
模型
附加
代码
方式
业务
数据
帮助
登录
字段
清楚
内容
初值
可以通过
可读性
对此
数字
文章
新手
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
美国顶级网络安全公司
大学生网络安全与信息化课题
服务器 国产管理芯片
数据库的一键恢复
网络安全事件反馈表
怀旧服服务器有哪些插件
新华社应用软件开发
abap 创建数据库表
cncps数据库
python获取数据库指定数据
凡尘互联网科技
基岩版如何加模组在服务器
gpu服务器功率一般多少
小黑盒提示服务器内核过低
乡卫生院网络安全自查报告
国际服怎么快速升级服务器
远程操作数据库突然断电
数据库联表优化
dnf手游充值后服务器怎么选择
云数据库软件有哪些
深圳web应用软件开发
网络安全法 方针和原则
软件开发调研报告总结
数据库表主键用什么类型数据
剑网3服务器中断
山东济南戴尔服务器代理服务
原神8开头服务器
泾县微型软件开发服务价格大全
软件开发与测试培训机构
数据库管理信息的特点