zoukankan      html  css  js  c++  java
  • 如何获取枚举的描述及其枚举值

    最近在做一个学校的系统,其中用到一些枚举,可是在显示下拉列表时要绑定枚举的描述及其枚举值时就只一个一个的默认设死,这样不灵活。有没有其快捷方法?搜了下百度很多相关资料有了些许眉目,代码如下

    1.首先定义枚举,这里要做显示学生状态的列表,如下所示

     1 /// <summary>
     2     /// 学生状态
     3     /// </summary>
     4     public enum StudentStatusEnum
     5     {
     6         /// <summary>
     7         /// 在读
     8         /// </summary>
     9         [Description("在读")]
    10         Study = 0,
    11 
    12         /// <summary>
    13         /// 毕业
    14         /// </summary>
    15         [Description("毕业")]
    16         Graduate = 1,
    17 
    18         /// <summary>
    19         /// 退学
    20         /// </summary>
    21         [Description("退学")]
    22         Leave = 2,
    23 
    24         /// <summary>
    25         /// 休学
    26         /// </summary>
    27         [Description("休学")]
    28         Suspend = 3
    29     }

    2.循环取枚举属性,Enum.GetNames这个方法是获取枚举定义的属性(如Study),Enum.GetValues这个方法是获取枚举定义的属性值(如0)

    1  foreach (var em in Enum.GetNames(typeof(StudentStatusEnum)))
    2  {
    3      var value = (int)Enum.Parse(typeof(StudentStatusEnum), em);
    4      var name = ((StudentStatusEnum)Enum.Parse(typeof(StudentStatusEnum), em)).GetDescription();
    5      lst.Add(new BusinessObject { Name=name,Code=value.ToString()});
    6  }

    3.GetDescription方法如下

     1 public static string GetDescription(this object o)
     2 {
     3             return GetEnumAtribute(o);
     4 }
     5 
     6 public static string GetEnumAtribute(object obj)
     7 {
     8             if (obj == null)
     9                 return string.Empty;
    10             var o = GetCustomAttribute<DescriptionAttribute>(obj);
    11             if (o != null)
    12                 return o.Description;
    13             return obj.ToString();
    14 }
    15 
    16 public static ATT GetCustomAttribute<ATT>(object o) where ATT : Attribute
    17         {
    18             if (o == null)
    19                 return default(ATT);
    20             System.Reflection.FieldInfo f = o.GetType().GetField(o.ToString());
    21             if (f == null)
    22                 return default(ATT);
    23             var a = f.GetCustomAttributes(typeof(ATT), true).FirstOrDefault();
    24             if (a == null)
    25                 return default(ATT);
    26             else
    27                 return (ATT)a;
    28         }

    完毕!!!

  • 相关阅读:
    技术晨读_20160611
    浏览器退出之后php还会继续执行么?
    大话keepalive
    也说说TIME_WAIT状态
    PHP的错误机制总结
    ASP.NET MVC中使用Unity Ioc Container
    Unity依赖注入使用详解
    小菜学习设计模式(五)—控制反转(Ioc)
    程序员的人性思考(续)
    Delegate、Predicate、Action和Func
  • 原文地址:https://www.cnblogs.com/scong/p/5259522.html
Copyright © 2011-2022 走看看