• 怎样让enum枚举支持string


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

    大家都知道enum是以下两种情况,不能支持string

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

    ,有的时候我们需要为枚举成员指定相应的说明性文字,如我引用SimpleEnum.Today的时候,需要在我的主界面上打印“今天”,而不是“Today”。这样就使我们在编码的时候要不停的编写switch来表示枚举变量的注释。那么,有没有更好的办法来维护我们的枚举成员呢。本文将提供一种解决方法。

    例如,有如下枚举变量:

    public enum SimpleEnum
        {
            Today,       //表示今天
            Tomorrow, //表示明天
        }

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

    首先我们需要创建一个EnumDescriptionAttribute类,表示对属性成员可以指定描述。

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

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

    不过我没有验证过这样使用的效率问题,以及会不会带来其它的问题,有兴趣的朋友可以研究一下

  • 相关阅读:
    Delphi的idhttp报508 Loop Detected错误的原因
    Delphi的idhttp报IOHandler value is not valid错误的原因
    华为S5700S-52P-LI-AC千兆网管交换机web登录界面配置
    解决win2003/2008下注册机或破解补丁程序无法运行问题
    SQL拆分(转)
    1602四线驱动
    ADC取样
    Delphi AES加密(转)
    使用Qt开发中国象棋(一):概述
    清除当前文件夹下.svn文件的方法
  • 原文地址:https://www.cnblogs.com/handboy/p/7164004.html
Copyright © 2020-2023  润新知