久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

利用DescriptionAttribute定義枚舉值的描述信息

 ThinkTank_引擎 2014-07-24

    本文是看到大尾巴狼blog上的《利用自定義屬性,,定義枚舉值的詳細文本》之后撰寫的,主要是描述了我個人所采用的顯示枚舉值描述信息的方法,。——cncxz(蟲蟲) 2006-2-28 

    我們知道System.ComponentModel命名空間下有個名為DescriptionAttribute的類用于指定屬性或事件的說明,,我所調用的枚舉值描述信息就是DescriptionAttribute類的Description屬性值,。

    首先定義一個枚舉

    /// <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”,。


思路擴展

    雖然使用DescriptionAttribute類基本上也滿足了一般需求,可也不排除個別情況下需要多個描述值,,針對這種情況,,我們可以自System.Attribute類繼承編寫自定義屬性類,例如:


    /// <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










    本站是提供個人知識管理的網絡存儲空間,,所有內容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內容中的聯系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多