根据枚举获取枚举的Description特性值

首先定义一个枚举:两个值:已确认、未确认。

public enum ConfirmStatusEnum
    {
        [Description("未确认")]
        unconfirmed = 1,
        [Description("已确认")]
        confirmed = 2
    }
View Code

 

转换枚举的方法:

private void InitConfirmStatus()
        {
            int values = 0;
            object[] atts = null;
            ConfirmStatusEntity statusEntity = null;
            DescriptionAttribute description = null;
            List<ConfirmStatusEntity> status = new List<ConfirmStatusEntity>();

            Type type = typeof(ConfirmStatusEnum);//取到枚举的Type
            var fields = type.GetFields();//获取枚举中所有字段
            foreach (var item in fields)
            {
                if (item.FieldType != type)//如果类型不是枚举的则跳过
                {
                    continue;
                }
                statusEntity = new ConfirmStatusEntity();//初始化实体
                values = (int)item.GetValue(item.Name);//根据名称获取,枚举项的值
                statusEntity.ID = values;
                atts = item.GetCustomAttributes(typeof(DescriptionAttribute), false);
                if (atts != null && atts.Length != 0)
                {
                    description = (DescriptionAttribute)atts[0];//获取特性的描述信息;  description就是特性中的描述信息
                    //给实体复制
                    statusEntity.StatusName = description.Description;
                    status.Add(statusEntity);
                }
            }

            //这个地方是我实际情况的处理,供参考
            ConfirmStatus = status;
            SelectConfirmStatus = status.FirstOrDefault();
        }
View Code

 

要转成的实体(根据实际情况,此操作可选):

 1 public class ConfirmStatusEntity
 2     {
 3         /// <summary>
 4         /// 此项对应枚举的int值,即 0,1  ....
 5         /// </summary>
 6         public int ID { get; set; }
 7 
 8         /// <summary>
 9         /// 此项对应枚举中特性的具体描述信息
10         /// </summary>
11         public string StatusName { get; set; }
12     }
View Code

里面有些是我实际情况使用的实体,供参考。

posted @ 2017-07-07 10:16  钱恩基  阅读(1480)  评论(0编辑  收藏  举报