我们都精通enum是以下二种情状

不赘述了。直接代码!

原稿公布时间为:2011-03-02 —— 来源于本人的百度作品 [由搬家工具导入]

图片 1图片 2Code
public class Cls_EnumHandle
    {
        public string GetDescription(Enum value)
        {
            if (value == null) throw new ArgumentNullException(“value”);
            string description = value.ToString();
            FieldInfo fieldInfo = value.GetType().GetField(description);
            EnumDescriptionAttribute[] attr = (EnumDescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(EnumDescriptionAttribute), false);
            if (attr != null && attr.Length > 0)
            {
                description = attr[0].Description;
            } 

我们都知晓enum是以下二种情形,不可以扶助string

            return description;
        } 

1,enum类型是静态
2,enum类型仅限于long、int、short   和byte。

        public IList ToList(Type type)
        {
            if (type == null) throw new ArgumentNullException(“type”);
            if (!type.IsEnum) throw new ArgumentException(“Type provided must be an Enum.”, “type”); 

,有的时候大家需要为枚举成员指定相应的表明性文字,如我引用SimpleEnum.Today的时候,需要在本人的主界面上打印“前些天”,而不是“Today”。那样就使我们在编码的时候要不停的编辑switch来代表枚举变量的诠释。那么,有没有更好的方法来保障我们的枚举成员呢。本文将提供一种缓解形式。

            ArrayList list = new ArrayList();
            Array array = Enum.GetValues(type);
            foreach (Enum value in array)
            { 
                list.Add(new KeyValuePair<Enum,string>(value,GetDescription(value)));
            } 

譬如说,有如下枚举变量:

            return list;
        }
    } 

public enum SimpleEnum
    {
        Today,       //表示明天
        汤姆(Tom)orrow, //代表后天
    }

    [AttributeUsage(AttributeTargets.Enum|AttributeTargets.Field,AllowMultiple=false)]
    public class EnumDescriptionAttribute : Attribute
    {
        private string description; 

 

        public string Description
        {
            get
            {
                return this.description;
            }
        } 

俺们可以透过为枚举成员指定属性,达到一劳永逸。

        public EnumDescriptionAttribute(string description) : base()
        {
            this.description = description;
        }
    } 

率先大家需要创立一个EnumDescriptionAttribute类,表示对性能成员可以指定描述。

/// <summary>
    /// 字体意义
    /// </summary>
    enum FontMean
    { 
        /// <summary>
        /// 正文
        /// </summary>
        [EnumDescription(“正文”)]
        Main,
        /// <summary>
        /// 批注
        /// </summary>
        [EnumDescription(“批注”)]
        Postil,
        /// <summary>
        /// 双列小字
        /// </summary>
        [EnumDescription(“双列小字”)]
        Double,
        /// <summary>
        /// 三列小字
        /// </summary>
        [EnumDescription(“三列小字”)]
        Three,
        /// <summary>
        /// 四列小字
        /// </summary>
        [EnumDescription(“四列小字”)]
        Four,
        /// <summary>
        /// 五列小字
        /// </summary>
        [EnumDescription(“五列小字”)]
        Five,
        /// <summary>
        /// 插入字
        /// </summary>
        [EnumDescription(“插入字”)]
        Insert,
        /// <summary>
        /// 其它
        /// </summary>
        [EnumDescription(“其它”)]
        Other
    } 

/// <summary>
    /// Provides a description for an enumerated type.
    /// </summary>
    [AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
    public sealed class EnumDescriptionAttribute : Attribute
    {
        private string description;
        public string Description
        {
            get { return this.description; }
        }

cbxFontType.DataSource = new Cls_EnumHandle().ToList(typeof(FontMean));
cbxFontType.DisplayMember = “Value”;
cbxFontType.ValueMember = “Key”;

        /// <summary>
        /// Initializes a new instance of the class.
        /// </summary>
        /// <param name=”description”></param>
        public EnumDescriptionAttribute(string description)
            : base()
        {
            this.description = description;
        }
    }

说不上,我们需要创设一个EnumHelper类,用于获取属性的值。

public static class EnumHelper
    {
        /// <summary>
        /// Gets the <see cref=”DescriptionAttribute” /> of an
<see cref=”Enum” />
        /// type value.
        /// </summary>
        /// <param name=”value”>The <see cref=”Enum” /> type
value.</param>
        /// <returns>A string containing the text of the
        /// <see cref=”DescriptionAttribute”/>.</returns>
        public static string GetDescription(Enum value)
        {
            if (value == null)
            {
                throw new ArgumentNullException(“value”);
            }

            string description = value.ToString();
            FieldInfo fieldInfo =
value.GetType().GetField(description);
            EnumDescriptionAttribute[] attributes =
               (EnumDescriptionAttribute[])
            
fieldInfo.GetCustomAttributes(typeof(EnumDescriptionAttribute), false);

            if (attributes != null && attributes.Length > 0)
            {
                description = attributes[0].Description;
            }
            return description;
        }
    }

最后,我们将上文介绍的枚举添加属性,如下:

public enum SimpleEnum
    {
        [EnumDescription(“表示前天”)]
        Today,       //
        [EnumDescription(“表示前几日”)]
        Tomorrow, //
    }

 

这么些时候,你就可以在任何想要拿到这一个特性描述的地点,使用如下语句:

Debug.Print(“{0}”, EnumHelper.GetDescription(SimpleEnum.Today));

然则自己没有讲明过如此使用的功能问题,以及会不会带动别样的题材,有趣味的朋友可以研究一下

相关文章