可空枚举的实现方法
来源:互联网 发布:如何卖图片知乎 编辑:程序博客网 时间:2024/06/05 23:39
可空枚举
在使用枚举的时候的,经常希望可以对枚举赋值为Null,或者清空枚举值。但是常用的枚举,就是固定的几项。而且不能对值类型赋值为Null。如何来实现可空枚举?
要求保留到数据库中的值,需要为NULL。这种情况在业务开发中经常出现。
尽管问题较小,但是可以探讨下解决方案,找到一种最优解。
方法1:将存储值定义可空类型
/// <summary> /// 单据状态,记录枚举值 /// </summary> public int? State { get; set; }
可行,如果为空,则数据库存储的值也为Null.
缺点:不方便我们对枚举进行展现和赋值,通常直接使用枚举,参见方法2。
方法2:定义枚举字段,并将其定义为可空类型
/// <summary> /// 状态 /// </summary> public RecordState? State { get; set; }
这种方法较上面的方法较好,同样能够实现此功能。
缺点:通常枚举值的展现是展现枚举的所有项,一般使用下拉框,必须选中一项。这样无法实现可空情况。如果要实现所需功能,需要在显示时,做下处理,加入空项。
方法3:在枚举中定义空项,并在写入数据库,或取值时进行的相关的转换
3.1 定义枚举:
/// <summary> /// 单据 /// </summary> public class Doc { /// <summary> /// 单据 /// </summary> public string DocNo { get; set; } /// <summary> /// 单据状态 /// </summary> public RecordState State { get; set; } /// <summary> /// 构造函数 /// </summary> public Doc() { } }
3.2 使用枚举:
/// <summary> /// 单据 /// </summary> public class Doc { /// <summary> /// 单据 /// </summary> public string DocNo { get; set; } /// <summary> /// 单据状态 /// </summary> public RecordState State { get; set; } /// <summary> /// 构造函数 /// </summary> public Doc() { } }
下面是数据时需要特别注意的:
写入数据库时,处理情况,参数赋值情况,这样其数据库的值才为NULL,
SqlParameter param = new SqlParameter("State",SqlDbType.SmallInt); if (doc.State == RecordState.None) { param.Value = DBNull.Value; } else { param.Value = doc.State; }
加载对象时:加载出来又是枚举项
//SqlDataReader reader Doc doc = new Doc(); if (reader["State"] == DBNull.Value) { doc.State = RecordState.None; } else { doc.State =(RecordState)reader.GetInt16(reader.GetOrdinal("State")); }
- 可空枚举的实现方法
- java 枚举的实现方法
- 关于DateTime?(可为空),Decimal?类型的格式化方法
- 9种枚举枚举进程的方法及实现
- 空连接的几种实现方法
- 实现带有抽象方法的枚举
- 一种常见的python实现枚举方法
- 实现带有构造方法的枚举
- 枚举类型的抽象方法定义实现
- C#的可空类型
- 可空类型的使用
- c#的可空类型
- js实现可拖动DIV的方法
- 可伸缩对话框的实现方法一
- 可拖动DIV层的实现方法
- C# 枚举器 手动实现枚举器 可枚举集合 枚举器操作 迭代器
- C#枚举器,手动实现枚举器,可枚举集合,枚举器操作,迭代器
- C# 枚举器 手动实现枚举器 可枚举集合 枚举器操作 迭代器
- Android删除系统自带软件对照表
- 深入理解缓冲区(一)
- Windows/Linux下使用Emacs+Slime+SBCL/SCHEME搭建LISP开发环境
- 购物网第一阶段总结笔记6:新闻管理模块之添加新闻(kindeditor在线编辑器的使用)
- 使用 rundll32.exe
- 可空枚举的实现方法
- review_js
- Python 中使用 pyrex 生成 Linux 可执行文件
- 莫陷入点击和评论陷阱
- 网站意见反馈(限输入字数)
- TI CC2530 IAR设置 (附带IAR for8051 V7.6 KeyGen ,IAR for 8051 V8.10 Keygen下载)
- java的几种对象(PO,VO,DAO,BO,POJO)解释
- iphone开发——保存图片到相册及容错处理
- POJ 2187 Beauty Contest