阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

C# 枚举与位枚举概述

34次阅读
没有评论

共计 2000 个字符,预计需要花费 5 分钟才能阅读完成。

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

C# 枚举与位枚举概述

一、枚举的概念

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

二、枚举的定义

声明 enum 变量:

enum  {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 类型唯一不为值类型的引用类型;
C# 枚举与位枚举概述

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

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

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


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

七、位枚举得定义

///
  /// 权限枚举
  ///
  [Flags]
  public enum permission                     注意加了 [Flags] 特性后有三种写法,{                                  一种是使用
八、位枚举的实例
//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.......。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2000字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中