欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基础知识---枚举

程序员文章站 2022-09-13 23:08:43
一、枚举的定义 枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。 C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。 二、枚举的声明 声明枚举的一般语法: enum { enumeration list }; 其中, enum_name 指 ......

一、枚举的定义

枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。

c# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。

 二、枚举的声明

声明枚举的一般语法:

enum <enum_name>
{ 
    enumeration list 
};

其中,

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

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

enum day { sun, mon, tue, wed, thu, fri, sat };

在编译枚举类型时,会把每个符号转换成类型的一个常量字段很一个int32的公共实例字段,不够后者不能通过代码调用。

因为枚举的符号是一个常量字段,如果在不同的程序集引用,可能会出现一些版本问题,

基础知识---枚举

每个枚举都有一个基础类型, 包含 byte,sbyte,short,ushort,uint,long ,ulong, 和int (最常用,c#默认的类型) 

三、枚举的转换

枚举转换成整数

day today = day.wed;
int daynumber = (int)today;

枚举转换成字符串

day today = day.wed;
string todaystr = today.tostring();

四、枚举的方法

枚举的主要三个方法: enum.getname() 、enum.getnames()、enum.getvalues()

day today = day.wed;
string name = enum.getname(typeof(day), 3);
enum.getnames(typeof(day))
enum.getvalues(typeof(day))

getname:获取单个枚举的名称

getnames:获取所有枚举的名称

getvalues:获取所有枚举的值

五、标志枚举(二进制枚举)

定义枚举时,添加flags特性,之后便可以对这些值执行and、or、not、xor按位运算

public enum myenum
{
    myenum1 = 1, //0x1
    myenum2 = 1 << 1, //0x2
    myenum3 = 1 << 2, //0x4
    myenum4 = 1 << 3, //0x8
    myenum5 = 1 << 4, //0x10
    myenum6 = 1 << 5, //0x20
    myenum7 = 1 << 6 //0x40
}

此时可以使用位移运算方便的获取多个枚举的组合变量:

myenum myenum = myenum.myenum1 | myenum.myenum2;
myenum |= myenum | myenum.myenum3;

或在组合中删除其中一项枚举:

myenum ^= myenum.myenum1;
myenum &= ~myenum.myenum2;

需要判断是否包含某一枚举值时,可以使用以下方法判断:

(curmyenum & myenum.enum1) > 0

| 并集  &  交集  ^  差集