项目中Enum枚举的使用
在.NET中,枚举一般有两种常见用法,一是表示唯一的元素序列,比如表示订单状态(未提交,待处理,处理中...)。另外一种是表示多种组合的状态,比如表示权限,因为可同时有多个不同权限。
基本用法
这里拿项止中订单的订单状态来举例。
1,使用枚举表示订单的订单状态,并保存到数据库
public void SaveOrder()
{
using (var db = new HotelDBEntities())
{
var order = new EFHotelOrder
{
OrderID = 10000,
OrderStatus = (byte)OrderStatusType.NotSubmit//订单状态
};
db.HotelOrderSet.Add(order);
db.SaveChanges();
}
}
/// <summary>
/// 訂單狀態
/// </summary>
[DataContract, Serializable]
public enum OrderStatusType : byte
{
/// <summary>
/// 未提交
/// </summary>
[Description("未提交")]
[EnumMember]
NotSubmit = 0, /// <summary>
/// 待處理
/// </summary>
[Description("待處理")]
[EnumMember]
WaitingProcess = 1, /// <summary>
/// 處理中
/// </summary>
[Description("處理中")]
[EnumMember]
Processing = 2, /// <summary>
/// 預訂成功
/// </summary>
[Description("預訂成功")]
[EnumMember]
BookingSuccess = 3
}
2,从数据库读取订单状态,并转化成相应枚举
var orderStatus= order.OrderStatus.ToEnum<LocalHotelOrderStatusType>();//ToEnum是扩展方法
高级用法
为了说明表示多种组合状态,拿用户拥有的权限来说明。此时需要在枚举上加[Flags]特性来标记位域。
1,枚举的定义
/// <summary>
/// 权限枚举
/// </summary>
[Flags]
[DataContract, Serializable]
public enum Permission : int
{
//[Description("未知")]
[EnumMember]
Unknown = 0,//也可以写成0x00或0 //[Description("创建")]
[EnumMember]
Create = 1 << 0,//0x01或1 //[Description("读取")]
[EnumMember]
Read = 1 << 1,//0x02或2 //[Description("修改")]
[EnumMember]
Update = 1 << 2,//0x04或4 //[Description("删除")]
[EnumMember]
Delete = 1 << 3//0x08或8
}
注意加了[Flags]特性后有三种写法,一种是使用<<符号,第二种是0x01,还有一种是直接写0,1,2,4,8...,一般来说是2的n次方来表示。
2,使用
//1,给用户创建,读取,修改和删除的权限
var permission = Permission.Create | Permission.Read | Permission.Update | Permission.Delete; //2,去掉用户的修改和删除权限
permission = permission & ~Permission.Update;//permission = permission ^ Permission.Update;这种写法有bug,如果重复执行又加回去了
permission = permission & ~Permission.Delete; //3,给用户加上修改的权限
permission = permission | Permission.Update; //4,判断用户是否有创建的权限
var isCreate = (permission & Permission.Create) != 0;//或者var isCreate =(permission & Permission.Create)== Permission.Create
保存到数据库的时候转换成int类型保存。
在数据库中可以这样来判断:
AND (@permission IS NULL OR (permission & @permission) =@permission)
项目中Enum枚举的使用的更多相关文章
- Java中Enum枚举的使用
三种不同的用法 注意项: 1.在switch中使用枚举能使代码的可读性更强. 2.如果要自定义方法,那么必须在enum实例序列的最后添加分号.而且Java要求必须先定义enum实例. 3.所有 ...
- java 中 enum 枚举的使用
package test3; public final class Program { public static void main(String[] args) { // Sys ...
- 浅谈 Java 中的枚举
枚举也就是一一列举,常用来表示那些可以明确范围的集合,比方说性别,季节,星期,月份等. 在 JDK 1.5 才出现枚举类,在没有出现枚举类之前,我们要表示几个确定的值通常会使用常量来表示,形如 pub ...
- Java enum枚举在实际项目中的常用方法
在项目实际开发过程中,经常会遇到对某些固定的值.字典项的定义的需求,很多项目经常使用常量来定义,其实在jdk1.5就已经引入了枚举,使用枚举可以更好的解决这类需求,本文主要记录枚举的优势以及经常在项目 ...
- MVC3不能正确识别JSON中的Enum枚举值
一.背景 在MVC3项目里,如果Action的参数中有Enum枚举作为对象属性的话,使用POST方法提交过来的JSON数据中的枚举值却无法正确被识别对应的枚举值. 二.Demo演示 为了说明问题,我使 ...
- C# 枚举在项目中使用心得
阅读目录 基本介绍 使用注意 使用方法 扩展用法 本文主要是我在项目中对C#枚举的使用心得,如有不足的地方欢迎您指出. 一.基本介绍 枚举是由一组特定常量构成的一组数据结构,是值类型的一种特 ...
- C#中的枚举(Enum)你知道多少呢?
写个随笔文章是最难想的,我要是写个C#枚举个人小结,估计博客园的各位园有也觉得是哪个刚接触C#的人写的,要是取个名字叫C#枚举,又觉得不能完全表达自己的意思,现在这个名字看起来还凑合吧,写篇文章不容易 ...
- Android 中如何使用 enum / 枚举
如何在Android开发中合理的使用enum 欢迎大家访问我的Github开源库,这里有好玩的App源码,想和大家分享.https://github.com/ChoicesWang 转载请注明:htt ...
- .NET中的枚举(Enum)
摘要:.NET中的枚举分为简单枚举和标志枚举,这次主要总结一下标志枚举适用条件,以及它的使用方法,并在文章的最后列举枚举使用的一些规范. 在刚接触.NET的枚举时,只用简单的枚举,对于标记枚举,只知道 ...
随机推荐
- 转 cocos2dx内存优化
cocos2dx里面,sprite本身不消耗多少内存,只是关联的材质文件消耗内存.假设有10个sprite关联同一个材质,也不会有10倍消耗. 关于图片占用的材质内存,我觉得还有好几种优化手段:1.对 ...
- 保存会话数据——session学习
Session:Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资 ...
- JS 和 Java 中URL特殊字符编码方式
前几天遇到url特殊字符编码的问题,在这里整理一下: JavaScript 1. 编码 escape(String) 其中某些字符被替换成了十六进制的转义序列. 解码 unescape(String ...
- Codeforces708C Centroids 【树形dp】
题目链接 题意:给定一棵n个结点的树,问:对于每个结点,能否通过删除一条边并添加一条边使得仍是树,并且删除该结点后得到的各个连通分量结点数 <= n/2? 题解:树形dp,两遍dfs,第一遍df ...
- nodejs学习笔记<三>关于路由(url)
在网站开发中,路由的设置非常关键.nodejs对路由处理封装了一个比较全面的模块. 来认识下url模块 1)在命令行(cmd)可以直接 node —> url 可直接查看url模块的所有方法. ...
- css sprites-简单实例让你快速掌握css sprites精髓
这段时间有几次接触到了css sprites的概念,一个就是在用css做滑动门的时候,另外一个就是在用YSlow分析网站性能的时候,于是对css sprites这个概念产生了浓厚的兴趣.在网上查找了很 ...
- golang学习之beego框架配合easyui实现增删改查及图片上传
golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...
- 淘宝封装的一款ui 非常不错
好用的淘宝ui http://m.sui.taobao.org/demos/ 手机端访问地址
- 转:程序员最值得关注的10个C开源项目
程序员最值得关注的10个C开源项目 1. Webbench Webbench 是一个在 linux 下使用的非常简单的网站压测工具.它使用 fork ()模拟多个客户端同时访问我们设定的 URL,测试 ...
- ajax的详细学习
地址:http://www.cnblogs.com/Garden-blog/archive/2011/03/11/1981778.html