none
如何将字符串转换为枚举类型,而不是枚举类型中的值? RRS feed

  • 问题

  • 我定义了如下两个枚举类型

            public enum ClassType
            {
                //内核类型
                clsKernel=0,
                //辅助类型
                clsAssist=1,
                //字典类型
                clsWordBook=2
            }

             public enum strConstType
            {
                //平台常量字符串
                [EnumDescription("平台常量字符串")]
                pltConst=0,
                //平台安全过滤字符串
                pltSecurity=1
            }

     

    然后我将两个枚举类型的字符串:"ClassType" 和 "strConstType" 放入到一个集合出来了cllRst中

    cllRst.add("ClassType")

    cllRst.add("strConstType")

    我打算通过遍历集合来找出上述两个枚举中的所有枚举值,这里涉及到将字符串转换为枚举类型,可以实现吗?

     

    2010年6月3日 2:21

答案

  • 你好!

        明白了,可以通过反射来实现:

        先构造你的枚举类型定义的程序集的实例

        Type t=myAssembly.GetType("命名空间.类型名");

        string[] names=Enum.GetNames(t);

        names里包括了这个枚举类型中指定的所有字符串名字!


    周雪峰
    • 已标记为答案 fxgang 2010年6月4日 8:14
    2010年6月4日 7:16
    版主

全部回复

  • Enum.GetValues(Type.GetType([namespace] + "ClassType"));

    前提是你需要知道枚举类型ClassType的名称空间。

    2010年6月3日 2:35
  • 不得行呀
    2010年6月3日 3:24
  • using System;
    using System.Collections.Generic;
    using System.Text;

    namespace ConsoleApplication1
    {
        public enum ClassType
        {
            //内核类型
            clsKernel = 0,
            //辅助类型
            clsAssist = 1,
            //字典类型
            clsWordBook = 2
        }

        public enum strConstType
        {
            //平台常量字符串
            pltConst = 0,
            //平台安全过滤字符串
            pltSecurity = 1
        }

        class Program
        {
            static void Main(string[] args)
            {
                List<string> enumnames = new List<string>() { "ClassType", "strConstType" };
               
                foreach (var item in enumnames)
                {
                    Console.WriteLine(item+"的枚举内部数值:");

                    foreach (var value in Enum.GetValues(Type.GetType("ConsoleApplication1." + item)))
                    {
                        Console.WriteLine(value);
                    }
                    Console.WriteLine();
                }
            }
        }
    }

    2010年6月3日 8:20
    版主
  • 你好!

        可以参考这个做法:

    using System;
    
    public class ParseTest {
      [FlagsAttribute]
      enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };
    
      public static void Main() {
    
        Console.WriteLine("The entries of the Colors Enum are:");
        foreach(string s in Enum.GetNames(typeof(Colors)))
          Console.WriteLine(s);
    
        Console.WriteLine();
    
        Colors myOrange = (Colors)Enum.Parse(typeof(Colors), "Red, Yellow");
        Console.WriteLine("The myOrange value has the combined entries of {0}", myOrange);
      }
    }


    周雪峰
    2010年6月3日 12:47
    版主
  • 你好!

    可能是我没有表达清楚,我的一个类文件中定义了若干个枚举类型,我把每个枚举的类型名称放到数据库的一张表中,然后我希望通过这张表列出所收枚举类型的枚举值字符串。

    2010年6月4日 6:29
  • 你好!

        明白了,可以通过反射来实现:

        先构造你的枚举类型定义的程序集的实例

        Type t=myAssembly.GetType("命名空间.类型名");

        string[] names=Enum.GetNames(t);

        names里包括了这个枚举类型中指定的所有字符串名字!


    周雪峰
    • 已标记为答案 fxgang 2010年6月4日 8:14
    2010年6月4日 7:16
    版主