ASP.NETMVC把数据库中枚举项的数字转换成文字

Gilana ·
更新时间:2024-09-20
· 1184 次阅读

标题可能无法表达我的本意。比如,有这样一个枚举:

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(); }

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对软件开发网的支持。如果你想了解更多相关内容请查看下面相关链接



枚举 数据 数字转换 数据库 ASP

需要 登录 后方可回复, 如果你还没有账号请 注册新账号