关于枚举用法的小笔记
最近因为经常需要使用枚举来进行操作,所以记录一下经常用到的一些枚举的用法.
什么是枚举
首先枚举是一组命名整型常量。枚举类型是使用enum关键字声明的。
C#枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。
public enum <enum_name>{
enumeration list
}
// eg:
public enum Days{ Sun, Mon, tue, Wed, thu, Fri, Sat }
枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值.默认情况下,第一个枚举符号的值是0.
为枚举提供友好的显示
枚举在控制显示上可以通过Attribute 注解来进行显示的优化,例如:
public enum Days{
[StringValue("周日")]
Sun = 0,
[StringValue("周一")]
Mon=1,
[StringValue("周二")]
Tue=2,
[StringValue("周三")]
Wed=3,
[StringValue("周四")]
Thu=4,
[StringValue("周五")]
Fir=5,
[StringValue("周六")]
Sat=6
}
然后添加一个扩展方法
public static class ExtensionMethods
{
public static string GetStringValue(this System.Enum value)
{
string stringValue = value.ToString();
Type type = value.GetType();
FieldInfo fieldInfo = type.GetField(value.ToString());
StringValue[] attrs = fieldInfo.
GetCustomAttributes(typeof(StringValue), false) as StringValue[];
if (attrs.Length > 0)
{
stringValue = attrs[0].Value;
}
return stringValue;
}
}
使用方式如下:
var sunStr = Days.Sun.GetStringValue();
// sunStr 的值将会是 "周日"
枚举、字符串、值的相互转换
还是对于Days这个枚举,下面则是相互转换的关系表达
Days day = Days.Sun
string dayString = " Mon " ;
int dayValue = 2;
// 枚举转字符串
string enumStringOne = day.ToString(); //效率低,不推荐
string enumStringTwo = Enum.GetName( typeof (Days), day);//推荐
// 枚举转值
int enumValueOne = day.GetHashCode();
int enumValueTwo = ( int )day;
int enumValueThree = Convert.ToInt32(day);
// 字符串转枚举
Days enumOne = (Days)Enum.Parse( typeof (Days), dayString);
// 字符串转值
int enumValueFour = ( int )Enum.Parse( typeof (Days), dayString);
// 值转枚举
Days enumTwo = (Days)dayValue;
Days enumThree = (Days)Enum.ToObject( typeof (Days), dayValue);
// 值转字符串
string enumStringThree = Enum.GetName( typeof (Days), dayValue)