C#枚举中使用Flags特性

.NET中的枚举我们一般有两种用法,一是表示唯一的元素序列;还有就是用来表示多种复合的状态。这个时候一般需要为枚举加上[Flags]特性标记为位域,这样我们就可以用"或"运算符组合多个状态.

例如:

 [Flags]    public enum Permission    {        create = 1,        read = 2,        update = 4,        delete = 8,            }
 Permission permission = Permission.create | Permission.read | Permission.update | Permission.delete;            Console.WriteLine("1、枚举创建,并赋值……");            Console.WriteLine(permission.ToString());            Console.WriteLine((int)permission);

            permission = (Permission)Enum.Parse(typeof(Permission), "5");            Console.WriteLine("2、通过数字字符串转换……");            Console.WriteLine(permission.ToString());            Console.WriteLine((int)permission);

            permission = (Permission)Enum.Parse(typeof(Permission), "update, delete, read", true);            Console.WriteLine("3、通过枚举名称字符串转换……");            Console.WriteLine(permission.ToString());            Console.WriteLine((int)permission);

            permission = (Permission)7;            Console.WriteLine("4、直接用数字强制转换……");            Console.WriteLine(permission.ToString());            Console.WriteLine((int)permission);

            permission = permission & ~Permission.read;            Console.WriteLine("5、去掉一个枚举项……");            Console.WriteLine(permission.ToString());            Console.WriteLine((int)permission);

            permission = permission|Permission.delete;            Console.WriteLine("6、加上一个枚举项……");            Console.WriteLine(permission.ToString());            Console.WriteLine((int)permission);

在数据库中判断:
AND (@permission IS NULL OR @permission=0 OR permission &@permission [email protected])

引用:http://www.cnblogs.com/youring2/archive/2011/12/16/2289832.html
时间: 2024-08-29 16:59:23

C#枚举中使用Flags特性的相关文章

位标记与Flags特性结合枚举在Unity中的使用小记

位标记与Flags特性结合枚举中的使用小记 enum在应用中往往用来标记一些我们需要的类似开关功能的效果,enum默认的初始化值是根据以下形式赋值的.如下图: 图-1 而且在是用enum来标记位时往往用十六进制而不是十进制,因为十进制的相关性要比十六进制强很多.早在C#4.0以前,要确定一个特定的位是否被设置,是对标志字与该位标志是用位与运算符,如: bool useRed = (ops & Colors.Red) == Colors.Red; C#4.0引入了HasFlag方法用来检测多个标记

Swift 3 中的新特性

原文:What's New in Swift 3? 作者:Ben Morrow 译者:kmyhy Swift 3 将在下半年退出,对于 Swift 程序员来说,它带来了许多改变. 如果你没有密切关注 Swift Evolution 项目,那么在将代码迁移到 Swift 3 时,你可能不知道它到底有什么改变,以及它会对你的代码带来什么影响.那么你可能需要读一下这篇文章了. 通过本文,我将重点介绍 Swift 3 中的重大改变,这些改变对你的代码有深刻影响.让我们开始吧! 开始 目前,Swift 3

Why coding like This ------ 递归以及枚举中的递归

title: "Why coding like This -- 递归以及枚举中的递归" date: 2015-08-28 21:34:16 categories: "why coding like this" tags: [swift进阶] Topic 1: 输入一个数组xs:[Int],对全体元素求和. Discuss 思路一: Hey,伙计,遍历数组,逐个相加,so easy! code: func sum1(xs:[Int])->Int{ var sum

5、自学——Linux的学习进度与任务【shell中bash的特性】

shell中bash的特性 shell中bash的特性 bash特性之一:命令行展开   把命令行的给定的一个特殊符号自动替换为别的字符串的机制 目录: 命令:cd [内置命令] 工作目录:当前所处的目录 cd:change directory(切换目录) cd 目标路径(不能是一个文件必须是一个目录) 所有从根起始的都是绝对路径:/文件名 基名:路径最后一个文件的名字  /x/y/z/m/n: 目标路径  /x/y/z/m: 是目录名或者路径名   两个命令: 获取路径的基名:   # bas

【enum】如何在枚举中定义自定义的方法,并进行使用

1.定一个枚举类 package com.eud.t1; public enum Color { //定义枚举中的常量 RED(1,"hongse"), GREEN(2,"qingse"),BLACK(3,"heise"); private int code; private String name; public int getCode() { return code; } public void setCode(int code) { thi

ASP.NET 5与MVC 6中的新特性

差点忘了提一句,MVC 6中默认的渲染引擎Razor也将得到更新,以支持C# 6中的新语法.而Razor中的新特性还不只这一点. 在某些情况下,直接在Web页面中嵌入某些JSON数据的方式可能比向服务端发起一次额外请求的方法更合适.在之前的版本中,实现这一点需要编写一些繁琐的映射代码,然后用某种JSON转换器对数据对象进行序列化,并将结果通过view model进行暴露.而在MVC 6中,以上所有的样板代码都可以简化为一句“@Json.Serialize(Model)”. 在实现图片缓存时,同样

根据类型获取枚举中的文字

比如数据库里存的是数字,从枚举中获取相应的文字描述 公共方法 public static string GetEnumDesc<T>(T Enumtype) { if (Enumtype == null) throw new ArgumentNullException("Enumtype"); if (!Enumtype.GetType().IsEnum) throw new Exception("参数类型不正确"); return ((Descript

枚举中的位运算

为什么枚举中位运算都可以使用并运算? 1.  什么是枚举中的位运算? 例如 int a = 1 << 0; //1左移0位    1*2^0 = 1; int b = 1 << 1; //1左移1位   1*2^1 = 2; int c = 1 << 2; //1左移2位   1*2^2 = 4; int d = 1 << 3; //1左移3位   1*2^3 = 8; 并运算 a | b 01 10 -------------- 11 ==1+2 int

OC中的一个特性:延展

OC中的一个特性:延展其实说白了,延展就是弥补C语言中的前向申明,我们知道,在C语言中,如果你想调用一个函数的话,那么在此之前必须要声明一个这个函数,就是有前置性.OC中为了弥补C语言中的这个问题,就有了延展的概念,下面来看一下代码:Person.h[objc]  view plaincopy 1. //   2. //  Person.h   3. //  10_CategoryExtend   4. //   5. //  Created by jiangwei on 14-10-11.