• 怎样让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));

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

  • 相关阅读:
    c++静态变量和静态函数
    c++抽象类和纯虚函数
    二维矩阵的算法
    JS操作CSS样式
    DOM
    JavaScript学习
    CSS样式表介绍
    HTML 学习整理
    ADO.Net知识总结
    数据库表查询高级 触发器游标等
  • 原文地址:https://www.cnblogs.com/handboy/p/7164004.html
Copyright © 2020-2023  润新知