【问题标题】:How to find enum value using dynamic enum name & enum key name? [duplicate]如何使用动态枚举名称和枚举键名称查找枚举值? [复制]
【发布时间】:2015-04-29 20:49:43
【问题描述】:

如果在编译时已知枚举名称和键,我知道如何找到枚举值。我有一种情况,我在运行时获得了枚举名称。任何建议如何实现这一目标。

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 };
    }
}

注意:我的枚举在一个类中。

【问题讨论】:

  • 这是吹毛求疵,但在 c# 中方法的参数应该小写。
  • 我已经在那里尝试过上述答案。但是,它不起作用。 Type.GetType("EnumDemo.EnumClass.Colors") 给出 null
  • 我认为这不是一个重复的问题。枚举不在任何类中。但是,就我而言,它在一个班级内。我遇到问题只是因为我的枚举在一个类中。
  • 既然你似乎知道你的枚举类型,你可以直接选择类型,我已经相应地修改了我的答案

标签: c# enums


【解决方案1】:

使用Enum.Parse 函数并将其转换为int,如here 所述

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);
}

【讨论】:

  • 我认为,如果您可以从另一个问题中复制答案而不进行任何更改,您应该将其标记为重复,而不是在此处复制粘贴答案。
  • 它工作正常。有一些错误(有点错字)你能改变 Console.WriteLine(typeof(EnumClass.Colors), "Red");到 Console.WriteLine(GetValueOf(typeof(EnumClass.Colors), "Red"));和 Console.WriteLine("YourNamespace.EnumClass+Colors", "Red");到 Console.WriteLine(GetValueOf("YourNamespace.EnumClass+Colors", "Red")); .一旦你更正它,我可以接受这个作为答案。谢谢
  • 哦,谢谢!我只是把它写出来,它是有道理的哈哈
【解决方案2】:

如果我正确理解问题,解决方案可能是:

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

【讨论】:

  • 感谢您的帮助。但是,我的情况不同。我在编译时不知道枚举名称(EnumClass.Colors)。我在运行时得到它
  • 怎么样:var EnumVal = GetEnumValue("EnumDemo.EnumClass+Colors", "Red")?
  • 是 GetEnumValue("EnumDemo.EnumClass+Colors", "Red") 正在工作
  • int enumValue = (int)Enum.Parse(typeof(Enum), enumStringName);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 2020-06-12
  • 2018-04-05
  • 2015-08-02
相关资源
最近更新 更多