详细了解C# 枚举与位枚举
作者:a说你呢 时间:2023-02-19 17:36:57
一、枚举的概念:
C# 枚举(Enum), 枚举类型是用于声明一组命名的常数的基本数据类型(值类型);
二、枚举的定义:
声明enum变量:
enum <enum_name> {enumeration list};
其中enum_name 指定枚举的类型名称; enumeration list 是一个用逗号分隔的标识符列表;
枚举列表中的每个符号代表一个整数值,一个比他前面的符号大的整数值。默认情况下,第一个枚举符号的值是0.例如:
enum Days {Sun , Mon, tue, Fir, sat };
三、枚举的案例,枚举变量的用法:
using System;
namespace EnumApplication
{
class EnumProgram
{
enum Days { Sun, Mon, tue, Wed, thu, Fri, sat };
static void Main(string[] args)
{
int WeekdayStart = (int)Days.Mon;
int WeekdayEnd = (int)Days.Fir;
Console.WriteLine("Monday:{0}",WeekdayStart);
Console.WriteLine("Firday:{0}",WeekdayEnd );
Console.ReadKey();
}
}
}
四、Enum类:
所有枚举类型都隐式地继承System.Enum 类型, System.Enum 类型是继承自System.ValueType类型唯一不为值类型的引用类型;
五、Enum 类:
方法 | 描述 |
CompareTo | 将此实例与指定对象进行比较并返回一个对二者的相对值的指示 |
Equals:指示此实例是否等于指定的对象; | |
Format | 根据指定格式将指定枚举类型的指定值转换为其等效的字符串表示形式 |
GetName | 在指定枚举中检索具有指定值的常数的名称 |
GetNames | 检索指定枚举中常数名称的数组 |
GetTypeCode | 返回此实例的基础TypeCode |
GetUnderlyingTye | 返回指定枚举的基础类型 |
GetValues | 指定枚举中常数值的数组 |
HasFlag | 确定当前实例中是否设置了一个或多个位域 |
IsDefined | 返回指定枚举中是否存在具有指定值的常数的指示 |
Parse | 将一个或多个枚举常数的名称或数字值得字符串表示转换成等效得枚举对象,一个参数指定该操作是否不区分大小写 |
TryParse | 将一个或多个枚举常数得名称或数字值得字符串表示转换成等效得枚举对象,用于指示转换是否成功得返回值 |
六、标志枚举/位枚举:
C# 标记枚举(Flags):枚举类型是用于声明一组命名得常数得基本类型数据(值类型)。
枚举值是互斥得。而位标记集合是一种由组合出现得元素形成得列表,通常设计为以“位或”运算组合新值;
枚举类型则通常表达一种语义相对独立得数值集合。而以枚举类型来实现位标记集合是最完美得组合,简称位枚举。
七、位枚举得定义:
///<summary>
/// 权限枚举
///</summary>
[Flags]
public enum permission 注意加了[Flags]特性后有三种写法,
{ 一种是使用<<符号,
Unknown = 0; // 也可以写成0x00或0第二种是0x01,
还有一种是直接写0,1,2,4,8....,
Create = 1<<0, // 0x01或1一般来说是2的n次方来表示。
注:<<左操作符,表示对这个数进行移位。
Read = 1<<1, //0x02或2
Update = 1<<2, //0x04或4
Delete = 1<<3 //0x08或8
}
八、位枚举的实例:
//1、给用户创建、读取,修改和删除的权限
var parmission = Permission.Create | parmission.Read | parmission.Update | parmission.Delete;
//2、去掉用户的修改和删除权限
parmission = parmission &~parmission.Update;
parmission = parmission &~parmission.Delete;
//3、给用户加上修改的权限
parmission = parmission | parmission.Update;
//4、判断用户是否有创建的权限
var isCreate = (parmission & parmission.Create)!=0;
//或者
var isCreate = (parmission & parmission.Create)==parmission.Create;
这时parmission枚举的值将变成0+1+4=5,它的ToSting()将变成“parmission.Create,
parmission.Read”,parmission.Update; 这里我们可以解释为什么第五个值Delete是8而不能成为5。
也就是说它的值不应该是前几项值的复合值。一个比较简单的方法
就是用2的n次方来依次位每一项赋值,例如:1,2,4,8,16,32,64.......。
来源:https://www.runoob.com/w3cnote/csharp-enum.html
标签:c#,枚举,位枚举
0
投稿
猜你喜欢
C#基于socket模拟http请求的方法
2022-09-12 09:55:11
spring使用OXM进行对象XML映射解析
2022-11-11 16:05:19
通过图例了解PowerDesigner使用方法
2021-06-05 23:16:24
SpringBoot文件上传功能的实现方法
2021-11-23 11:24:27
viewpager+photoview实现图片查看器
2022-10-30 11:46:05
Android studio so库找不到问题解决办法
2023-10-28 02:20:49
如何设计一个安全的API接口详解
2023-03-06 14:57:03
java发起http请求获取返回的Json对象方法
2022-06-20 04:00:00
C#先判断是否存在再创建文件夹或文件与递归计算文件夹大小
2023-07-29 00:04:58
Spring Bean生命周期之属性赋值阶段详解
2022-09-28 04:34:11
SpringBoot + SpringSecurity 短信验证码登录功能实现
2022-10-16 10:26:25
java简单列出文件夹下所有文件的方法
2022-12-23 19:25:05
Unity 按钮添加OnClick事件操作
2023-06-28 15:57:27
java WebSocket客户端断线重连的实现方法
2023-05-26 22:45:18
Spring Boot 应用的热部署配置方法
2022-03-26 23:36:56
java Quartz定时器任务与Spring task定时的几种实现方法
2021-11-14 22:31:47
Solr通过特殊字符分词实现自定义分词器详解
2022-11-29 09:19:36
Spring Shell应用程序开发流程解析
2021-06-28 23:20:50
Java中IO流简介_动力节点Java学院整理
2022-04-29 23:08:16
Java中String、StringBuffer、StringBuilder的区别详解
2023-03-28 00:06:50