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

来源:互联网 发布:liststring 排序 java 编辑:程序博客网 时间:2024/06/05 05:19

有以下一个枚举类型:

    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