收集和总结的枚举的一些用法,仅供参考。
有时候我们希望变量的取值是在一个固定的集合中,这时就需要用枚举。
一、枚举的声明:
公式:
访问修辞符 enum 枚举名:基础类型 { 枚举成员 }
枚举取值类型:
byte、sbyte、short、ushort、int、uint、long 、ulong
如果没有显式定义枚举的类型,默认为int。
下面我们以一周为例:
class Program
{
enum Weekdays
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
}
static void Days(Weekdays day)
{
switch (day)
{
case Weekdays.Mon:
Console.WriteLine("今天是星期一");
break;
case Weekdays.Tues:
Console.WriteLine("明天是星期二");
break;
case Weekdays.Wed:
Console.WriteLine("后天是星期三");
break;
case Weekdays.Thur:
Console.WriteLine("几天后星期四");
break;
case Weekdays.Fri:
Console.WriteLine("几天后星期五");
break;
case Weekdays.Sat:
Console.WriteLine("几天后星期六");
break;
case Weekdays.Sun:
Console.WriteLine("几天后星期日");
break;
default:
Console.Write("参数错误!");
break;
}
}
static void Main(string[] args)
{
//调用方式1
Weekdays days = Weekdays.Mon;
Days(days);
//调用方式二
Days(Weekdays.Tues);
}
}
二、枚举成员的值:
第一个枚举成员的值默认为0,后面成员的值在第一个成员数值上一次加1,枚举成员的值可以为负数。
Weekdays day = (Weekdays)Enum.Parse(typeof(Weekdays), "Mon", true);
Console.WriteLine("Mon的值是{0}",(int)day);
结果:
打印Tues的结果:
以上代码说明了如何从字符串获取枚举值,并转化为整数。需要使用静态的Enum.Parse()方法,此方法带有三个参数,第一个是要使用的枚举类型,第二个是要转换的枚举成员的字符串,第三个是bool类型,定义转换时是否忽略大小写。Enum.Parse()方法返回的是对象的引用,所以需要转换为需要的枚举类型(拆箱操作)。
下面显式为枚举成员赋值:
enum Weekdays
{
Mon = 1,
Tues,
Thur,
Fri,
Sat,
Sun
}
只指定Mon的值
打印结果:
三、遍历枚举值:
foreach (Weekdays day in Enum.GetValues(typeof(Weekdays)))
{
Console.WriteLine((int)day + ":" + day);//int可以获取枚举值
}
结果:
四、枚举的Description特性:
Description特性可以为枚举添加描述,需要引入using System.ComponentModel;
[Description("一周")]
enum Weekdays
{
[Description("星期一")]
Mon = 1,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
}
获取描述:
FieldInfo需要添加 using System.Reflection 引用
public static string GetEnumDescription(Enum enumValue)
{
string value = enumValue.ToString();
FieldInfo field = enumValue.GetType().GetField(value);
object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false); //获取描述属性
if (objs == null || objs.Length == 0) //当描述属性没有时,直接返回名称
return value;
DescriptionAttribute descriptionAttribute = (DescriptionAttribute)objs[0];
return descriptionAttribute.Description;
}
然后调用
Console.WriteLine(desc.ToString());
结果:
暂时先到这里,以后会补充!