标题可能无法表达我的本意。比如,有这样一个枚举:
public enum mychoice
{
myfirstchoice = 0,
mysecondchoice =1,
mythirdchoice = 2
}数据库中,某表某字段保存值为"0,1,2",在显示的时候,我们希望是"第一个选择,第二个选择,第三个选择"。如何做呢?
可以为枚举项上面标注自定义特性。先自定义一个特性如下:
public class enumdisplaynameattribute : attribute
{
private string _displayname;
public enumdisplaynameattribute(string displayname)
{
_displayname = displayname;
}
public string displayname
{
get
{
return _displayname;
}
}
}然后,把自定义特性标注放到枚举项上去。
public enum mychoice
{
[enumdisplayname("我的第一个选择")]
myfirstchoice = 0,
[enumdisplayname("我的第二个选择")]
mysecondchoice =1,
[enumdisplayname("我的第三个选择")]
mythirdchoice = 2
}现在,需要一个帮助方法,能读出枚举项上的自定义特性enumdisplayname。
public class enumext
{
/// <summary>
/// 获取枚举项的注释
/// </summary>
/// <param name="e">枚举项</param>
/// <returns></returns>
public static string getenumdescription(object e)
{
//获取枚举项
type t = e.gettype();
//获取枚举项的字段
fieldinfo[] fis = t.getfields();
foreach (fieldinfo fi in fis)
{
//如果当前字段名称不是当前枚举项
if (fi.name != e.tostring())
{
continue;//结束本次循环
}
//如果当前字段的包含自定义特性
if (fi.isdefined(typeof (enumdisplaynameattribute), true))
{
//获取自定义特性的属性值
return (fi.getcustomattributes(typeof(enumdisplaynameattribute), true)[0] as enumdisplaynameattribute).displayname;
}
}
return e.tostring();
}
public static list<selectlistitem> getselectlist(type enumtype)
{
list<selectlistitem> selectlist = new list<selectlistitem>();
//selectlist.add(new selectlistitem{text = "--请选择--",value = ""});
foreach (object e in enum.getvalues(enumtype))
{
selectlist.add(new selectlistitem { text = getenumdescription(e), value = ((int)e).tostring() });
}
return selectlist;
}
}以上,
getenumdescription方法根据枚举项获取其上的自定义特性enumdisplaynameattribute的displayname属性值。
getselectlist方法根据枚举的type类型返回selectlistitem集合,通常在asp.net mvc中使用。
最后,就能实现本篇的需求:
static void main(string[] args)
{
string mychoiceint = "0,1,2";
string[] choicearr = mychoiceint.split(',');
string temp = string.empty;
foreach (string item in choicearr)
{
//转换成枚举的类型
short enumvalshort = short.parse(item);
temp = temp + enumext.getenumdescription((mychoice)enumvalshort) + ",";
}
console.writeline(temp.substring(0, temp.length - 1));
console.readkey();
}以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对代码网的支持。如果你想了解更多相关内容请查看下面相关链接
发表评论