如何使用动态枚举名称来查找枚举值枚举键名?

时间:2015-04-29 08:42:56

标签: c# enums

我知道如果enum name&密钥在编译时已知。我有一种情况,我在运行时获得枚举名称。任何建议如何实现这一点。

using System;

namespace EnumDemo
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            string[] ArrItemNames = Enum.GetNames(typeof (EnumClass.Colors));
            foreach (string ItemName in ArrItemNames)
            {
                Console.WriteLine(
                    "{0} = {1:D}", ItemName,
                    Enum.Parse(typeof (EnumClass.Colors), ItemName));
            }
            Console.WriteLine();

            var EnumVal = GetEnumValue("Colors", "Red");// Here I am expecting 1
            Console.ReadKey();
        }

        //
        public static int GetEnumValue(string EnumName, string ItemName)
        {
            return 0;
        }
    }

    public class EnumClass
    {
        public enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };
    }
}

注意:我的枚举是在课堂内。

2 个答案:

答案 0 :(得分:4)

使用Enum.Parse功能并按照here所述将其转换为int

public static int GetValueOf(string enumName, string enumConst)
{
    Type enumType = Type.GetType(enumName);
    if (enumType == null)
    {
        throw new ArgumentException("Specified enum type could not be found", "enumName");
    }

    object value = Enum.Parse(enumType, enumConst);
    return Convert.ToInt32(value);
}

如果你打算在你的子类中为你的枚举调用它,你需要这样做:

public static void Main() {
{
    Console.WriteLine(GetValueOf("YourNamespace.EnumClass+Colors", "Red"));
}

由于你知道这种类型,你也可以直接使用它:

public static void Main() {
{
    Console.WriteLine(GetValueOf(typeof(EnumClass.Colors), "Red"));
}


public static int GetValueOf(Type enumType, string enumConst)
{
    object value = Enum.Parse(enumType, enumConst);
    return Convert.ToInt32(value);
}

答案 1 :(得分:1)

如果我正确理解了问题,解决办法可能是:

public static int GetEnumValue(string ItemName)
{
    return (int)Enum.Parse(typeof(EnumClass.Colors), ItemName);
}