zoukankan      html  css  js  c++  java
  • C# 枚举与位枚举(Enum)

    一、枚举的概念:

    C# 枚举(Enum), 枚举类型是用于声明一组命名的常数的基本数据类型(值类型);

    二、枚举的定义:

    声明 enum 变量: 

    enum <enum_name> {enumeration list};

    其中 enum_name 指定枚举的类型名称,enumeration list 是一个用逗号分隔的标识符列表;

    枚举列表中的每个符号代表一个整数值,一个比他前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0。例如:

    enum Days {Sun , Mon, tue, Fir, sat };

    三、枚举的案例,枚举变量的用法:

    实例

     1 using System;
     2 namespace EnumApplication
     3 {
     4     class EnumProgram
     5     {
     6           enum Days { Sun, Mon, tue, Wed, thu, Fri, sat };
     7           
     8           static void Main(string[] args)
     9           {
    10                 int WeekdayStart = (int)Days.Mon;
    11                 int WeekdayEnd = (int)Days.Fir;
    12                 Console.WriteLine("Monday:{0}",WeekdayStart);  
    13                 Console.WriteLine("Firday:{0}",WeekdayEnd );  
    14                 Console.ReadKey();
    15           }    
    16     }
    17 }

    四、Enum 类:

    所有枚举类型都隐式地继承 System.Enum 类型, System.Enum 类型是继承自 System.ValueType 类型唯一不为值类型的引用类型;

    五、Enum 类:

    方法描述
    CompareTo 将此实例与指定对象进行比较并返回一个对二者的相对值的指示
    Equals:指示此实例是否等于指定的对象;
    Format 根据指定格式将指定枚举类型的指定值转换为其等效的字符串表示形式
    GetName 在指定枚举中检索具有指定值的常数的名称
    GetNames 检索指定枚举中常数名称的数组
    GetTypeCode 返回此实例的基础TypeCode
    GetUnderlyingTye 返回指定枚举的基础类型
    GetValues 指定枚举中常数值的数组
    HasFlag 确定当前实例中是否设置了一个或多个位域
    IsDefined 返回指定枚举中是否存在具有指定值的常数的指示
    Parse 将一个或多个枚举常数的名称或数字值得字符串表示转换成等效得枚举对象,一个参数指定该操作是否不区分大小写
    TryParse 将一个或多个枚举常数得名称或数字值得字符串表示转换成等效得枚举对象,用于指示转换是否成功得返回值

    六、标志枚举/位枚举

    C# 标记枚举(Flags):枚举类型是用于声明一组命名得常数得基本类型数据(值类型)。

    枚举值是互斥得。而位标记集合是一种由组合出现得元素形成得列表,通常设计为以"位或"运算组合新值。

      

    枚举类型则通常表达一种语义相对独立得数值集合。而以枚举类型来实现位标记集合是最完美得组合,简称位枚举。

    七、位枚举得定义  

     1 ///<summary>
     2 /// 权限枚举
     3 ///</summary>
     4 [Flags]
     5 public enum permission                       注意加了[Flags]特性后有三种写法,
     6 {                                    一种是使用<<符号,
     7       Unknown = 0; // 也可以写成0x00或0             第二种是0x01,                
     8                                     还有一种是直接写0,1248....,
     9       Create = 1<<0, // 0x01或1                 一般来说是2的n次方来表示。  
    10                                     注:<<左操作符,表示对这个数进行移位。
    11       Read = 1<<1,  //0x02或2
    12 
    13       Update = 1<<2, //0x04或4
    14 
    15       Delete = 1<<3  //0x08或8
    16 }

    八、位枚举的实例

     1 //1、给用户创建、读取,修改和删除的权限
     2 var parmission = Permission.Create | parmission.Read | parmission.Update | parmission.Delete;
     3 
     4 //2、去掉用户的修改和删除权限
     5 parmission = parmission &~parmission.Update;
     6 parmission = parmission &~parmission.Delete;
     7 
     8 //3、给用户加上修改的权限
     9 parmission = parmission | parmission.Update;
    10 
    11 //4、判断用户是否有创建的权限
    12 var isCreate = (parmission & parmission.Create)!=0;
    13 //或者
    14 var isCreate = (parmission & parmission.Create)==parmission.Create;
    15   这时parmission枚举的值将变成0+1+4=5,它的ToSting()将变成“parmission.Create,
    16   parmission.Read”,parmission.Update; 这里我们可以解释为什么第五个值Delete是8而不能成为5。
    17   也就是说它的值不应该是前几项值的复合值。一个比较简单的方法
    18   就是用2的n次方来依次位每一项赋值,例如:1248163264.......。
  • 相关阅读:
    java线程池
    Mongodb 常见的查询语句及与 mysql 对比
    jhipster入门
    Django基础笔记
    python编程的简洁代码
    Pyhon环境变量的一些坑
    win10下解压版mysql-8.0.12安装教程
    Win10改AHCI无需重装系统(无需改注册表)的方法
    windows10用xshell连接xbox里安装的ubantu(18.04)
    本地图片变成网络图片
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/12470299.html
Copyright © 2011-2022 走看看