关闭

C# - 将enum类型映射到字符串上

标签: enumc#string
780人阅读 评论(0) 收藏 举报
分类:

有以下一个枚举类型:

    public enum MyColors
    {
        [StringValue("red")]     red,
        [StringValue("blue")]    blue,
        [StringValue("green")]   green,
        [StringValue("yellow")]  yellow,
        [StringValue("block")]   block
    }

我想输出MyColors.red是“red”。
定义StringValue为一个类,继承自System.Attribute

    public class StringValue : System.Attribute
    {
        private string _value;

        public StringValue (string value)
        {  
            _value = value;  
        }

        public string Value {  
            get { return _value; }  
        }
    }

定义静态类StringEnum

    public static class StringEnum
    {
        public static string GetStringValue (System.Enum value)
        {
            string output = null;  
            System.Type type = value.GetType ();  
            System.Reflection.FieldInfo fi = type.GetField (value.ToString ());  
            StringValue[] attrs = fi.GetCustomAttributes (typeof(StringValue), false) as StringValue[];  
            if (attrs.Length > 0) {  
                output = attrs [0].Value;  
            }  
            return output;  
        }
    }

使用StringEnum.GetStringValue(System.Enum value)方法调用,
写一段测试代码:

    public class EmptyClass
    {
        static void Main(string[] args)
        {
            Console.WriteLine (StringEnum.GetStringValue (MyColors.red));
            Console.WriteLine (StringEnum.GetStringValue (MyColors.blue));
            Console.WriteLine (StringEnum.GetStringValue (MyColors.green));
            Console.WriteLine (StringEnum.GetStringValue (MyColors.yellow));
            Console.WriteLine (StringEnum.GetStringValue (MyColors.block));
        }
    }

输出结果是:
这里写图片描述
完美解决将enum类型映射到字符串上这个问题。
由于GetStringValue(System.Enum value)方法使用的是父类System.Enum,所有定义的Enum都可以同时调用这个方法,实现代码共享,不用写多个GetStringValue方法了。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:81676次
    • 积分:1655
    • 等级:
    • 排名:千里之外
    • 原创:77篇
    • 转载:42篇
    • 译文:2篇
    • 评论:32条
    文章分类
    最新评论