C# 枚举(Enum)
枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。
C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。
声明 enum 变量
声明枚举的一般语法:
enum <enum_name>
{
enumeration list
};
其中,
- enum_name 指定枚举的类型名称。
- enumeration list 是一个用逗号分隔的标识符列表。
枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0.例如:
enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };
下面的实例演示了枚举变量的用法:
实例
using System;
public class EnumTest
{
enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat };
static void Main()
{
int x = (int)Day.Sun;
int y = (int)Day.Fri;
Console.WriteLine("Sun = {0}", x);
Console.WriteLine("Fri = {0}", y);
}
}
当上面的代码被编译和执行时,它会产生下列结果:
Sun = 0
Fri = 5
枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0。
但是,也可以自定义每个符号的值:
using System;
namespace EnumApplication
{
class EnumProgram
{
enum Days {
Mon=71,
tue=61,
Wed=51,
thu=41,
Fri=51,
Sat=61,
Sun=71
};
static void Main(string[] args)
{
int WeekdayStart = (int)Days.Mon;
int WeekdayEnd = (int)Days.Fri;
Console.WriteLine("Monday: {0}", WeekdayStart);
Console.WriteLine("Friday: {0}", WeekdayEnd);
Console.ReadKey();
}
}
}
输出结果:
Monday: 71
Friday: 51
枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0。第 n 个符号值与第 n-1 个有关。
using System;
class Program
{
enum Day {a=8,b,c=1,e,f,g};
static void Main(string[] args)
{
int a = (int)Day.a;
int b = (int)Day.e;
Console.WriteLine(a);
Console.WriteLine(b);
Console.ReadKey();
}
}
结果:
8
2
枚举体在给数组中具体标号位置给予含义是使用,可以使程序更容易读懂和修改。
enum len { Length, width, height};
static void Main(string[] args)
{
int[] parameter = new int[3] {1,5,8};
Console.WriteLine("Length: {0}", parameter[(int)len.Length]);
Console.WriteLine("width: {0}", parameter[(int)len.width]);
Console.WriteLine("height: {0}", parameter[(int)len.height]);
}
此时可以一眼看出打印值为参数的长宽高。
相对于使用
#define length 0
#define width 1
#define height 2
该方式在插入一个参时更方便:
#define area 0
#define length 1
#define width 2
#define height 3
enum len {area, Length, width, height};
很明显使用Enum方式更容易更改。
位标志枚举(flags enumeration)
现实中不总是用离散值枚举,以一周中的7天为例,假设要求应用程序用户指定一周中各天的任意组合,便可以使用"位标志枚举"。使用位标志枚举时,可以用或运算创建新的组合值。以星期为例,声明方法如下:
[Flags]
public enum Days
{
None = 0,
Sunday = 0x01, //0000 0001
Monday = 0x02, //0000 0010
Tuesday = 0x04, //0000 0100
Wednesday = 0x08, //0000 1000
Thursday = 0x10, //0001 0000
Friday = 0x20, //0010 0000
Saturday = 0x40, //0100 0000
Weekend = Sunday | Saturday, //0100 0001
Workdays = Monday | Tuesday | Wednesday | Tuesday | Friday, //0011 1110
}
为了让位标志枚举的值能够组合,所有值都必须是2的幂。因为组合多个值时,必须能确定结果为哪个离散值。
在简单枚举中,可以让名称None或最常用默认名称对应于0,但标志枚举要求0对应于名称None,这个值意味着所有标志都未设置。
执行:
Days days = Days.Weekend;
Console.WriteLine("{0} : {1}",days,(int)days);
结果输出:
Weekend : 65
Enum Gender
{
Male = 1,
, Female = 0
}
Gender gender = Gender.Male;
// Enum => int
int genderId = (int)gender; // 1
// int => Enum
Gender gender1 = (Gender)0; // Female,超出枚举数值范围返回数值本身
// Enum => string
string genderStr = gender.ToString(); // Male
// string => Enum
Gender gender2 = (Gender)Enum.Parse(typeof(Gender), "Female"); // Gender.Female,超出字符串范围报错
using System;
class Program
{
enum Day {a=8,b,c=1,e,f,g};
static void Main(string[] args)
{
int a = (int)Day.a;//8
int x = (int)Day.b;//9
int c = (int)Day.c;//1
int b = (int)Day.e;//2
int g = (int)Day.g;//4
}
}
默认情况下,第一个枚举符号的值是 0。
using System;
class Program
{
enum Day { a, b, c, e = 1, f, g };
static void Main(string[] args)
{
int a = (int)Day.a;//0
int x = (int)Day.b;//1
int c = (int)Day.c;//2
int b = (int)Day.e;//1
int g = (int)Day.g;//3
}
}
来源:CSDN
作者:Simon.Qi
链接:https://blog.csdn.net/weixin_45794138/article/details/103897427