项目中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的枚举时,只用简单的枚举,对于标记枚举,只知道 ...
随机推荐
- 泰信---->20131025~20131101(周计划安排)
学习java相关知识计划安排: [前期复习阶段] (一)熟悉java相关语言基础. (二)搭建一个纯web项目工程,实现增加,删除,修改,查询以及分页...功能. (三)熟悉jboss的使用和相关配置 ...
- R 语言的优劣势是什么?
R 语言的优劣势是什么? 2015-05-27 程序员 大数据小分析 R,不仅仅是一种语言 本文原载于<程序员>杂志2010年第8期,因篇幅所限,有所删减,这里刊登的是全文. 工欲善其 ...
- jquery使用技巧
1. 禁用右键点击(Disable right-click) <!DOCTYPE html> <html> <head> <meta charset=&quo ...
- adb_常用命令
1. adb push 电脑中的文件(包含路径) Android中的绝对路径 2. adb pull Android中的绝对路径文件 电脑中的绝对路径 3. adb install ??.ap ...
- Div里面载入另一个页面的实现(取代框架)(AJax)(转)
随着框架越来越不火了,HTML5就不对框架支持了,iframe也只有url了,Div就担当了此大任 DIV+CSS在页面部局确实也很让人满意,使用也更方便 今天突然遇到一个问题,那就是需要导入另一个页 ...
- 提高iOS开发效率的第三方框架等
http://zhangmingwei.iteye.com/blog/2208783 http://www.kuqin.com/shuoit/20150703/346900.html
- python操作mongodb之基础操作
#coding:utf-8 __author__ = 'hdfs' import pymongo from pymongo import MongoClient client = MongoClien ...
- Alpha
100% — FF95% — F290% — E685% — D980% — CC75% — BF70% — B365% — A660% — 9955% — 8C50% — 8045% — 7340% ...
- 如何进行shell脚本正确性测试
在实际工作中,需要对shell脚本进行正确性测试. 如何用最快最有效的方式进行测试? 很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了. 其实这是十分不严 ...
- mialx配置qq邮箱发送邮件
#send mail use mailx(v12.0.4)#edit configure file set smtp-use-starttlsset from=xxxxxxxxx@qq.comset ...