• 自定义属性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);
                }
  • 相关阅读:
    JAVA的学习日记15
    JAVA的学习日记14
    CIRD主站与DOPAS构建笔记#1
    信仰之题——Codeforces Round 259(附题面完整翻译)
    平面最近点对问题
    BZOJ4552 [Tjoi2016&Heoi2016]排序
    BZOJ1001 [Beijing2006]狼抓兔子
    (二)k8s编写资源清单
    linux常用搜索工具find/whereis/locate
    解决centos7 的/etc/rc.local不会开机执行
  • 原文地址:https://www.cnblogs.com/contraII/p/3356703.html
Copyright © 2020-2023  润新知