项目中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的枚举时,只用简单的枚举,对于标记枚举,只知道 ...
随机推荐
- SQL中char、varchar、nvarchar的区别(zhuan)
char char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符. nvarcha ...
- ubuntu安装jdk-6u45-linux-x64.bin___ZC_20160423
for : Android4.4源码编译 环境 : ubuntu12.04_desktop_amd64 1. 1.1.jdk-6u45-linux-x64.bin 放置于 /home 1.2.命令&q ...
- 我想有个梦想(I want have a dream)
成东青说过:梦想是什么,梦想就是你坚持就觉得是幸福东西. 多好啊,有梦想,想想就觉得幸福的.也许你会觉得有点做作,但我真觉得是这样.没有梦想就像一个没有了灵魂的躯壳,整天浑浑噩噩,整天麻木的上班下班, ...
- Python学习(20)python操作mysql数据库_安装
win7系统下python3.4连接mysql数据库 1.到python官方网站下载最新python程序.根据系统有32,64位. 直接下一步,就可以安装成功. 2.在python官网中去下载 ...
- JavaScript基础知识点
本书目录 第一章: JavaScript语言基础 第二章: JavaScript内置对象第三章: 窗口window对象第四章: 文档document对象第五章: 表单form对象第六章: ...
- 【转载】Spark系列之运行原理和架构
参考 http://www.cnblogs.com/shishanyuan/p/4721326.html 1. Spark运行架构 1.1 术语定义 lApplication:Spark Applic ...
- iOS开发之 Xcode 5 下让你的应用在不同状态(debug, release)有不同的图标
http://nickcheng.com/post/unique-icons-for-your-app-in-different-state-in-xcode5-debug-release 应用在发布 ...
- eclipse右击打war包class没打上去的问题
今天,遇到个诡异的问题,一个工程eclipse打war包class就是打不上,别的能打上,发现这样选择tomcat,打包成功,谨此备注.
- Velocity教程 (zhuan)
http://blog.csdn.net/qq_25237663/article/details/52262532 ****************************************** ...
- scala集合
优先使用不可变集合.不可变集合适用于大多数情况,让程序易于理解和推断,因为它们是引用透明的( referentially transparent )因此缺省也是线程安全的. 使用可变集合时,明确地引用 ...