自定义属性Attribute的运用

有时候需要一个枚举类,能够承载更多的信息,于是可以利用attribute这个特性。

首先编写自己业务需求类

[AttributeUsage(AttributeTargets.Field)]
    public class IconAttribute : Attribute
    {
        public IconAttribute()
        {
        }
        public string Name
        {
            get; set; 
        }
        public string Icon
        {
            get; set;
        }
        public string Title
        {
            get; set;
        }
        public string Url
        {
            get;
            set;
        }

        public static IconAttribute Get(object enm,string pref="null")
        {
            string key = enm.ToString() + pref;
            return CacheHelper.Get<IconAttribute>(key,//自定义扩展的缓存类
                CacheTimeOption.OneMinute, () =>
                {
                    var ret = new IconAttribute();
                    MemberInfo[] mis = enm.GetType().GetMember(enm.ToString());
                    if (mis.Length > 0)
                    {
                        foreach (MemberInfo mi in mis)
                        {
                            IconAttribute attr = Attribute.GetCustomAttribute(mi, typeof(IconAttribute)) as IconAttribute;
                            if (attr != null)
                            {
                                ret.Icon = attr.Icon ?? "";
                                ret.Title = attr.Title ?? "";
                                ret.Name = attr.Name ?? "";
                                ret.Url = attr.Url ?? "";
                            }
                        }
                    }
                    return ret;
                });
        }
    }

枚举定义

 public enum ProductOption
    {
        [IconAttribute(Name = "qq1",
            Url = "/home.ashx/index/1", 
            Icon = "../../images/pic/1.png")]
        QQ1= 1,

        [IconAttribute(Name = "qq2",
            Url = "/home.ashx/index/2",
            Icon = "../../images/pic/2.png")]
        QQ2 = 2
    }

调用

//遍历项目的枚举
            foreach (ProductOption item in Enum.GetValues(typeof(ProductOption)))
            {
                var link = IconAttribute.Get(item, "ProductOption");
                ret.Add(link);
            }
原文地址:https://www.cnblogs.com/contraII/p/3356703.html