有时候需要一个枚举类,能够承载更多的信息,于是可以利用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); }