自定義枚舉類型註釋屬性,並在程序中獲取

//方法:  
 public static string GetEnumDescription<TEnum>(object value)
        {
            Type enumType = typeof(TEnum);
            if (!enumType.IsEnum)
            {
                throw new ArgumentException("enumItem requires a Enum ");
            }
            var name = Enum.GetName(enumType, Convert.ToInt32(value));
            if (name == null)
                return string.Empty;
            object[] objs = enumType.GetField(name).GetCustomAttributes(typeof(DescriptionAttribute), false);
            if (objs == null || objs.Length == 0)
            {
                return string.Empty;
            }
            else
            {
                DescriptionAttribute attr = objs[0] as DescriptionAttribute;
                return attr.Description;
            }
        }
 
// 調用:
string desc=GetEnumDescription<Filter>(Filter.Public); //得到Filter(enum)中,爲Public 所定義的描述信息.
 
// Filter枚舉的描述:
 
 public enum Filter
    {
        /// <summary>
        /// 全部
        /// </summary>
        [Description("全部")]
        All = 1,
        /// <summary>
        /// 已分配
        /// </summary>
        [Description("已分配")]
        Assigned = 2,
        /// <summary>
        /// 待分配
        /// </summary>
        [Description("待分配")]
        Assigning = 3,
        /// <summary>
        /// 返回調整
        /// </summary>
        [Description("返回調整")]
        Adjusting = 4,
        /// <summary>
        /// 已拒絕
        /// </summary>
        [Description("已拒絕")]
        Reject = 5,
        /// <summary>
        /// 公共
        /// </summary>
        [Description("公共")]
        Public = 6,
        /// <summary>
        /// Sales把發回調整的客戶編輯後不先提交只保存信息
        /// </summary>
        [Description("草稿")]
        Draft = 7,
        /// <summary>
        /// 排隊
        /// </summary>
        [Description("排隊")]
        InQueue = 8,
        /// <summary>
        /// 發放給大區經理審批
        /// </summary>
        [Description("審批轉移")]
        ToManagerCheck = 9,
        /// <summary>
        /// 不返回任何值的條件
        /// </summary>
        None = -1,
    }
 
//4, DescriptionAttribute 的定義:
 
public class DescriptionAttribute : Attribute
    {
        public DescriptionAttribute(string desc);
        public string Description { get; set; }
    }
 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 public partial class 枚舉_Enum_自定義屬性 : System.Web.UI.Page
    {
        protected void Page_Load(object sender , EventArgs e)
        {
            string desc = GetEnumDescription<MyColorEnum>(MyColorEnum.red);
            //desc = GetEnumDescription<MyColorEnum>(1);
            Response.Write(desc);
        }
        public enum MyColorEnum
        {
            [DescriptionAttribute("紅色")]
            red ,
            [DescriptionAttribute("藍色")]
            blue ,
            [DescriptionAttribute("綠色")]
            green ,
            [DescriptionAttribute("白色")]
            white
        }
        //其實這個屬性已經有了:
        //public class DescripteAttribute : Attribute
        //{
        //    public DescripteAttribute(string desc)
        //    {
        //        this._description = desc;
        //    }
        //    private string _description;
        //    public string Description
        //    {
        //        get
        //        {
        //            return this._description;
        //        }
        //        set
        //        {
        //            this._description = value;
        //        }
        //    }
        //}
        /// <summary>
        /// 獲取枚舉項的描述
        /// </summary>
        /// <param name="enumItem">具體枚舉類型</param>
        /// <returns></returns>
        public static string GetEnumDescription<TEnum>(object value)
        {
            Type enumType = typeof(TEnum);
            if(!enumType.IsEnum)
            {
                throw new ArgumentException("不是枚舉類型");
            }
            string enumItem = Enum.GetName(enumType , Convert.ToInt32(value));
            if(enumItem == null)
            {
                return string.Empty;
            }
            object[] objs = enumType.GetField(enumItem).GetCustomAttributes(typeof(DescriptionAttribute) , false);
            if(objs == null || objs.Length == 0)
            {
                return string.Empty;
            }
            else
            {
                DescriptionAttribute attr = objs[0] as DescriptionAttribute;
                return attr.Description;
            }
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章