枚举类型的作用是限制其变量只能从有限的选项中取值,枚举成员对应于一个数字,默认值从0开始,并依次递增。
创建一个简单的枚举类型:
public enum Months
{
January=1,
February=2,
March=3,
April=4,
May=5,
June=6,
July=7,
August=8,
September=9,
October=10,
November=11,
December=12
}
故意设置开始枚举值为1,但是默认的枚举值仍是0.
Console.WriteLine(default(Months)); 输出0 ,即使枚举没有值为 0 的成员,它的默认值永远都是 0
在C# 枚举成员的类型默认是 int 类型,通过继承可以声明枚举成员为其它类型,枚举类型一定是继承自 byte、sbyte、short、ushort、int、uint、long 和 ulong 中的一种,不能是其它类型。修改上枚举类型:
public enum Months:byte
{
January=1,
February=2,
March=3,
April=4,
May=5,
June=6,
July=7,
August=8,
September=9,
October=10,
November=11,
December=12
}
枚举类型基本用法:
1.枚举成员转字符串
Console.WriteLine(Months.April.ToString());//"April"
Console.WriteLine(Months.April.ToString());//"April"
2.字符串转枚举成员变量
Enum.TryParse("May", out Months M); //Months.May
Months M2 = (Months)Enum.Parse(typeof(Months), "may", true);//Months.May
3. 枚举转数字
byte b = (byte)Months.December; //12
4. 数字转枚举
Months M3 = (Months)3; //Months.March
5.获取枚举所属的数字类型
Type t = Enum.GetUnderlyingType(typeof(Months));//System.Byte
6.获取枚举的所有成员变量
var values = Enum.GetValues(typeof(Months));
7.获取所有枚举成员的字段名称
var names = Enum.GetNames(typeof(Months));
另外,值得注意的是,枚举可能会得到非预期的值(值没有对应的成员)。比如:
Months m = (Months)20;
Console.WriteLine(m.ToString());//20
枚举的 Flags 特性
[Flags]
public enum Months : byte
var works = Months.March | Months.April;
Console.WriteLine(works); //July 上述将3和4求和了,起始这不是我们的意图
重新定义枚举:
[Flags]
public enum Months
{
January = 1<<0, //0000 0001 1
February = 1 << 1,//0000 0010 2
March = 1 << 2, //0000 0100 4
April = 1 << 3, //0000 1000 8
May = 1 << 4, //0001 0000 10
June = 1 << 5, //0010 0000 20
July = 1 << 6, //0100 0000 40
August = 1 << 7, //1000 0000 80
September = 1 << 8,//0001 0000 0000 100
October = 1 << 9, //0010 0000 0000 200
November = 1 << 10,//0100 0000 0000 400
December = 1 << 11,//1000 0000 0000 800
}
var works = Months.March | Months.April;
Console.WriteLine(works);//March, April 这样就是可以与或逻辑运算了。