[2014-12-29]使用Enum位模式进行多重状态(或权限)管理
前言
对于Enum在AspNet Mvc中的应用,我之前提到一种扩展,如何在 Asp.net Mvc 开发过程中更好的使用Enum。这里将介绍另一种更好的使用Enum的方法。
Enum定义
以一个代表权限的枚举作为示例。
[Flags]
public enum RolePerm
{
View=1,
Add=2,
Edit=4,
Del=8
}
按位或赋值以及按位与验证
原理很简单,请自行复习位运算。简述如下:
按位或,两个bit只要有一个是1,则置1;
按位与,两个bit只要有一个是0,则置0。
示例代码:
class Program
{
static void Main(string[] args)
{
//初始化一个空Enum
var perm =new RolePerm();
Console.WriteLine((int)perm);//0
Console.WriteLine(perm.ToString());//0
//按位或
perm = RolePerm.View | RolePerm.Add;
Console.WriteLine((int)perm);//3
Console.WriteLine(perm.ToString());//View, Add
//tips:在asp.net mvc 的模型绑定阶段,表单或url中的字符串“View, Add”,
//可以被自动绑定到其对应的枚举类型参数中,请自行尝试
//按位与,验证是否有其中一个权限
if ((perm & RolePerm.Del)==RolePerm.Del)//false
{
Console.WriteLine("YES,有删除权限");
}
else
{
Console.WriteLine("NO,没有删除权限");
}
//按位与,验证是否有其中多个权限
perm = perm | RolePerm.Edit;//使perm不等于待比较的pend
var pend = RolePerm.View | RolePerm.Add;
if ((perm & pend) == pend)//true
{
Console.WriteLine("YES,授权范围内");
}
else
{
Console.WriteLine("NO,不在授权范围内 ");
}
Console.Read();
}
}
上述代码以权限作为示例,同理,可以定义一个保存多种状态的枚举变量Status,以相同的方式进行状态验证。不再赘述,请自行尝试。
[2014-12-29]使用Enum位模式进行多重状态(或权限)管理的更多相关文章
- 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16
一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...
- 大型网站演化(转载 http://homeway.me/2014/12/10/think-about-distributed-clusters/)
0x01.大型网站演化 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率. 集群主要分为:高可用集群(High Availability Clu ...
- [MVC学习日记]2014/12/01 初步认识MVC模型。
2014/12/011.初步认识MVC模型.MVC模式是一种表现模式.它将web应用程序分成三个部分,模型(Model).视图(View).控制器(Controller).Model:是实现业务逻辑层 ...
- 挑战30天写操作系统-day3-进入32位模式并导入C语言
目录 1.制作真正的IPL IPL:启动区,启动程序装载器完整代码: ; haribote-ipl ; TAB=4 CYLS EQU 10 ; 声明CYLS=10 ORG 0x7c00 ; 指明程序装 ...
- [原创] 【2014.12.02更新网盘链接】基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装
[原创] [2014.12.02更新网盘链接]基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装 joinlidong 发表于 2014-11-29 14:25:50 ...
- 《30天自制操作系统》笔记(06)——CPU的32位模式
<30天自制操作系统>笔记(06)——CPU的32位模式 进度回顾 上一篇中实现了启用鼠标.键盘的功能.屏幕上会显示出用户按键.点击鼠标的情况.这是通过设置硬件的中断函数实现的,可以说硬件 ...
- IIS32位,64位模式下切换
一.32位模式 1.cscript %systemdrive%\inetpub\adminscripts\adsutil.vbs set w3svc/appPools/enable32bitappon ...
- 2015.12.29~2015.12.30真题回顾!-- HTML5学堂
2015.12.29~2015.12.30真题回顾!-- HTML5学堂 吃饭,能够解决饥饿,提供身体运作机能.练习就像吃饭,强壮自己,提升编程技能,寻求编程技巧的最佳捷径!吃饭不能停,练习同样不能停 ...
- 如何在安装32位Oracle客户端组件的情况下以64位模式运行
C#使用System.Data.OracleClient连接Oracle数据库.之前在WinXP上正常运行的程序移植到Windows 2008 x64上之后就连不上数据库了,错误信息如下:启动data ...
随机推荐
- 【HTML】模板
<!DOCTYPE html> <head> <base href="http://www.w3school.com.cn/i/" target=&q ...
- Java并发编程——线程安全及解决机制简介
简介: 本文主要介绍了Java多线程环境下,可能会出现的问题(线程不安全)以及相应的解决措施.通过本文,你将学习到如下几块知识: 1. 为什么需要多线程(多线程的优势) 1. 多线程带来的问题—线程安 ...
- TypeScript02 方法特性【参数种类、参数个数】、generate方法、析构表达式、箭头表达式、循环
1 方法的参数 1.1 必选参数 调用方法时实参的个数必须和定义方法时形参在数量和类型上匹配 /** * Created by Administrator on 2017/8/2 0002. */ f ...
- AJAX基础_AJAX获取PHP数据
前言 本篇AJAX基础教程,只讲干货,拒绝废话. 全文通过两个实例来讲解AJAX的基本用法,第1个实例是使用AJAX技术从服务器获取纯文本(HTML)数据, 第2个实例是获取从服务器PHP文件的数据. ...
- [Android]Android焦点流程代码分析
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/7286503.html 通过View的View::focusSe ...
- Cordova + idea 环境搭建
1.安装前期工作 1).安装Node.js http://nodejs.cn/download/ 里面内置了npm,可以用来安装 Cordova,把该路径添加到环境变量,这样就可以在 cmd 里面任何 ...
- 纯Css绘制三角形箭头三种方法
在制作网页的过程中少不了绘制类似图片的三角形箭头效果,虽然工程量不大,但是确实麻烦.在学习的过程中,总结了以下三种方法,以及相关的例子. 一.三种绘制三角形箭头方法 1.方法一:利用overflow: ...
- Canvas: 优雅的代码作图系列:中国国旗
Canvas: 优雅的代码作图系列:中国国旗 有很多个这练手的,好的差的都有.这次,我演示下用极客的代码,画出最标准的中国国旗,并详细说明代码是怎么写出来的. 绘制规范: 一.严格按照绘制说明: 二. ...
- 【NO.9】jmeter - 一个完整的接口测试的脚本
使用Jmeter对一个接口地址或者一个页面地址执行N次请求,下面来说说怎么建立一个测试脚本(也称为”测试计划”). 1. 运行Jmeter.bat 双击"Jmeter.bat"文件,稍等片刻后J ...
- oracle监控脚本【转】
1. 监控事例的等待 select event,sum(decode(wait_Time,0,0,1)) "Prev", sum(decode(wait_Time,0,1,0)) ...