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

原创 2016年08月31日 10:45:45

有以下一个枚举类型:

    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方法了。

版权声明:阳仔原创,转载请注明出处。

C# Enum,Int,String的互相转换

Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型。如果没有显式声明基础类型,则使用Int32。编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举。     注意:枚举...
  • pzhtpf
  • pzhtpf
  • 2013年07月23日 10:50
  • 46572

[c#] string和Enum的相互转换

定义以下枚举: public enum TimeOfDay {     Moning = 0,     Afternoon = 1,     Evening = 2, }; (1...
  • goodai007
  • goodai007
  • 2013年03月18日 16:13
  • 2148

[C/C++] 简单有用的enum2string宏

网络中已经有许多有关enum2string的讨论,做法也多种多样(见末尾的附录)。本文也描述一个方法:如何把enum类型变成对应的字符串。不多说了,很简单,一目了然。贴代码:// // enum2s...
  • dyw
  • dyw
  • 2010年09月27日 20:12
  • 3879

string::c_str()

转自: http://hi.baidu.com/pez1420/blog/item/3dca32cba97f83f752664fdb.html  Visual C++ Standard Librar...
  • jinzhilong580231
  • jinzhilong580231
  • 2011年12月29日 10:54
  • 2651

C# Enum与int,string互相转换

using System;   class Program {    public enum Color    {       Red =...
  • likingsn
  • likingsn
  • 2014年11月10日 15:28
  • 836

C# Enum,Int,String的互相转换 枚举转换

Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型。如果没有显式声明基础类型,则使用 Int32。编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举。 注意:枚举类型...
  • wushang923
  • wushang923
  • 2013年12月02日 10:33
  • 2135

C# enum 添加字符串(中文)标记

来源:《编写高质量代码改善C#程序的157个建议》-建议110:用类来代替enum 废话不多说,代码来得更亲切。 using System; using System.Collections.Gen...
  • sinat_30224769
  • sinat_30224769
  • 2016年09月14日 10:21
  • 1417

C# 枚举、字符串、值的相互转换

using  System; class  Program {     public   enum  Color    {       Red  =   0xff0000 ,       Orang...
  • qq61394323
  • qq61394323
  • 2016年02月27日 18:53
  • 5152

C# enum和string的转换

C# Json转换操作 枚举类型 Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型, 如果没有显式声明基础类型,则使用 Int32。 注意:枚举类型的基类型是除 Char 外的任何...
  • xiaominggunchuqu
  • xiaominggunchuqu
  • 2017年09月03日 17:11
  • 416

将String转换成Enum 以及Enum转换成String

 一:  在C#中将String转换成Enum:  object Enum.Parse(System.Type enumType, string value, bool ignoreCase); ...
  • jiangzhanchang
  • jiangzhanchang
  • 2010年10月27日 15:23
  • 14209
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# - 将enum类型映射到字符串上
举报原因:
原因补充:

(最多只允许输入30个字)