C#枚举数值与名称的转换实例分享
首先建立一个枚举:
/// <summary>
/// 颜色
/// </summary>
public enum colortype
{
/// <summary>
/// 红色
/// </summary>
red,
/// <summary>
/// 蓝色
/// </summary>
bule,
/// <summary>
/// 绿色
/// </summary>
green
}
获得枚举数值:
int code = colortype.red.gethashcode();
有数值获得枚举名称:
string name1=colortype.red.tostring();
//或者
string name2= enum.parse(typeof(colortype), code.tostring()).tostring();
以上获得的枚举名称,是英文,如果要获得相应的中文解释,可以利用attribute来实现,代码如下:
/// <summary>
/// 颜色
/// </summary>
public enum colortype
{
/// <summary>
/// 红色
/// </summary>
[description("红色")]
red,
/// <summary>
/// 蓝色
/// </summary>
[description("蓝色")]
bule,
/// <summary>
/// 绿色
/// </summary>
[description("绿色")]
green
}
在枚举中,加入description,然后建立一个类,有如下方法用来把枚举转换成对应的中文解释:
public static class enumdemo
{
private static string getname(system.type t, object v)
{
try
{
return enum.getname(t, v);
}
catch
{
return "unknown";
}
}
/// <summary>
/// 返回指定枚举类型的指定值的描述
/// </summary>
/// <param name="t">枚举类型</param>
/// <param name="v">枚举值</param>
/// <returns></returns>
public static string getdescription(system.type t, object v)
{
try
{
fieldinfo ofieldinfo = t.getfield(getname(t, v));
descriptionattribute[] attributes = (descriptionattribute[])ofieldinfo.getcustomattributes(typeof(descriptionattribute), false);
return (attributes.length > 0) ? attributes[0].description : getname(t, v);
}
catch
{
return "unknown";
}
}
}
调用方法如下:
string name3=enumdemo.getdescription(typeof(colortype), colortype.red)