States字段使用规范有哪些
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,States字段使用规范有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。解决方式States对应位域枚举States
千家信息网最后更新 2025年01月20日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安全错误
数据库的锁怎样保障安全
宽城租房软件开发
数据库采购
数据库冗余设计原则
软件开发opl含义
服务器php版本升级
一个应用程序连接多个数据库
光遇服务器进入需要排队吗
sql数据库主键怎么自动生成
无线网络安全提升
hp 服务器raid
网络安全空间 发言稿
大学生网络安全事故典型案例分析
宝鸡市系统软件开发
个人电脑虚拟服务器有什么用处
泰兴自动网络技术市场
数据库保险箱
服务器主机通电一会就停了
数据库二维逻辑
网络安全发心得
华为云服务器下载数据
数据库原理与技术是什么
长宁区会计网络技术备案
中学生网络安全教育讲座
授时服务器品牌
欧盟网络安全指南
oracle数据库 采购
数据库事务处理方法图解
多用户上传数据的服务器
网络安全科技馆河南巡展鹤壁站
数据库二维逻辑