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

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

相关文章推荐

Hibernate中枚举Enum类型的映射策略

在Java中`Enum`是一种“奇葩”的存在,“奇葩”不代表没用,对于这种比较特殊的存在,hibernate会有很多种选择来完成Enum类型字段的映射,首先要说明的是在hibernate都是把`Enu...

enum类型映射到hbm.xml配置文件

1. 性别枚举类型类:Gender.java   [java] view plaincopy /**    * Filename: Expo...

C# Enum枚举类型使用总结

C# Enum枚举类型使用总结
  • sqlove
  • sqlove
  • 2011-05-26 16:45
  • 1008

C++ 模拟C#/Java中的检举(enum)类型

在C++中enum类型仅仅相当于一系列的整数常量,如果要在日志中显示或标准输出打印时需要把整数与一个字符串对应起来,从配置文件中读取时为了配置文件的可读性最好配置的是字符串名称而不是数字,使用enum...
  • Nocky
  • Nocky
  • 2011-04-11 15:06
  • 1183

C# enum类型的版本问题

在一个Main函数里调用另外一个dll,记为 TestLibrary.dll里的一个常量值。代码如下: Main函数: using lib; internal class Progr...
  • kmguo
  • kmguo
  • 2013-11-03 22:05
  • 906

enum : C#中的枚举类型,原来有这么多用法

今天来的时候打开了MSDN扫了一眼C#里的枚举类型~~ 蓦然发现这东西还有些新玩法。首先是简单介绍,……在此略过。因为enum用法很简单么~定义一个简单的枚举类型:   enum Days {Sat,...

C# 中的枚举类型 enum (属于值类型)

C# 支持两种特殊的值类型:枚举和结构。         声明枚举:声明时要声明所有可能的值。 using System; using System.Collections.Generic; usin...

C#学习日记11---数据类型 之 枚举(enum)类型

前面我所介绍的全都是 值类型 ,写这么多了,我总结以下什么叫 值类型 。简单的说,该类型的变量直接存储所包含的值。这里我们与C语言中的字符串相对比一下,char ch[6] = "HC666"; 老师...
  • HC666
  • HC666
  • 2015-10-05 09:30
  • 1184

JNA类型映射实例__结构体中包含字符串数组

JNA类型映射,C结构体中包含 字符串数组时的映射。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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