本文是看到大尾巴狼blog上的《利用自定義屬性,,定義枚舉值的詳細文本》之后撰寫的,主要是描述了我個人所采用的顯示枚舉值描述信息的方法,。——cncxz(蟲蟲) 2006-2-28 首先定義一個枚舉 /// <summary>
/// 測試用的枚舉 /// </summary> public enum ArticleTypeList { [DescriptionAttribute("中國軟件開發(fā)網絡")] csdn, msdn, [DescriptionAttribute("博客園")] cnblogs, other } 默認情況下我們采用ArticleTypeList.csdn.ToString()的方式只能得到“csdn”,而不是“中國軟件開發(fā)網絡”,,為了獲取“中國軟件開發(fā)網絡”,,我定義了下面這樣一個靜態(tài)方法: /// <summary> /// 獲取枚舉類子項描述信息 /// </summary> /// <param name="enumSubitem">枚舉類子項</param> public static string GetEnumDescription(Enum enumSubitem) { string strValue = enumSubitem.ToString(); FieldInfo fieldinfo = enumSubitem.GetType().GetField(strValue); Object[] objs = fieldinfo.GetCustomAttributes(typeof(DescriptionAttribute), false); if (objs == null || objs.Length == 0) { return strValue; } else { DescriptionAttribute da = (DescriptionAttribute)objs[0]; return da.Description; } } 直接通過GetEnumDescription(ArticleTypeList.csdn)便可獲取到“中國軟件開發(fā)網絡”了,對于那些沒有定義DescriptionAttribute的子項則直接返回枚舉值,,例如GetEnumDescription(ArticleTypeList.msdn)將返回“msdn”,。 /// <summary> /// 自定義的一個屬性類 /// </summary> public class selfAttribute : Attribute { public selfAttribute(string displayText, string displayTest) { m_DisplayText = displayText; m_DisplayTest = displayTest; } private string m_DisplayText = string.Empty; private string m_DisplayTest = string.Empty; public string DisplayText { get { return m_DisplayText; } } public string DisplayTest { get { return m_DisplayTest; } } } 然后調整一下ArticleTypeList的代碼: /// <summary>
/// 測試用的枚舉 /// </summary> public enum ArticleTypeList { [DescriptionAttribute("中國軟件開發(fā)網絡"), selfAttribute("自定義:中國軟件開發(fā)網絡", "http://www.csdn.net")] csdn, [selfAttribute("自定義:MSDN2 Library", "http://msdn2.microsoft.com/zh-cn/library/default.aspx")] msdn, [DescriptionAttribute("博客園")] cnblogs, other } 最后編寫調用的靜態(tài)方法: /// <summary> /// 獲取枚舉類子項描述信息 /// </summary> /// <param name="enumSubitem">枚舉類子項</param> public static string GetEnumDescription(Enum enumSubitem) { Object obj = GetAttributeClass(enumSubitem, typeof(DescriptionAttribute)); if (obj == null) { return enumSubitem.ToString(); } else { DescriptionAttribute da = (DescriptionAttribute)obj; return da.Description; } } public static void GetselfAttributeInfo(Enum enumSubitem,out string text,out string test) { Object obj = GetAttributeClass(enumSubitem, typeof(selfAttribute)); if (obj == null) { text=test= enumSubitem.ToString(); } else { selfAttribute da = (selfAttribute)obj; text= da.DisplayText; test = da.DisplayTest; } } /// <summary> /// 獲取指定屬性類的實例 /// </summary> /// <param name="enumSubitem">枚舉類子項</param> /// <param name="attributeType">DescriptionAttribute屬性類或其自定義屬性類 類型,,例如:typeof(DescriptionAttribute)</param> private static Object GetAttributeClass(Enum enumSubitem, Type attributeType) { FieldInfo fieldinfo = enumSubitem.GetType().GetField(enumSubitem.ToString()); Object[] objs = fieldinfo.GetCustomAttributes(attributeType, false); if (objs == null || objs.Length == 0) { return null; } return objs[0]; } 這樣一來,,對于DescriptionAttribute類描述信息,調用方法不變,,而selfAttribute相關值的調用如下所示: string text, test; GetselfAttributeInfo(ArticleTypeList.csdn, out text, out test); 相關源碼和工程下載:http://files.cnblogs.com/cncxz/EnumDescription.rar |
|
來自: ThinkTank_引擎 > 《Enum》