Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用动态枚举名查找枚举值&;枚举键名?_C#_Enums - Fatal编程技术网

C# 如何使用动态枚举名查找枚举值&;枚举键名?

C# 如何使用动态枚举名查找枚举值&;枚举键名?,c#,enums,C#,Enums,如果枚举名和键在编译时已知,我知道如何查找枚举值。我有一种情况,在运行时获取枚举名称。任何关于如何实现这一点的建议 using System; namespace EnumDemo { internal class Program { private static void Main(string[] args) { string[] ArrItemNames = Enum.GetNames(typeof (EnumCla

如果枚举名和键在编译时已知,我知道如何查找枚举值。我有一种情况,在运行时获取枚举名称。任何关于如何实现这一点的建议

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

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

使用
enum.Parse
函数,并按说明将其转换为
int

如果要为子类中的枚举调用此函数,则需要采用以下方式:

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

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

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

我认为,如果你可以复制另一个问题的答案而不做任何更改,你应该将其标记为一个副本,而不是复制粘贴在这里的答案。这很有效。有一些错误(有点打字错误),你能换一下控制台吗;到Console.WriteLine(GetValueOf(typeof(EnumClass.Colors),“Red”);和Console.WriteLine(“YourNamespace.EnumClass+Colors”,“Red”);到Console.WriteLine(GetValueOf(“YourNamespace.EnumClass+Colors”,“Red”)。一旦你改正了,我可以接受这个答案。谢谢,谢谢!我只是在脑子里写出来的,这是有道理的,哈他是吹毛求疵,但在c#中,方法的参数应该是小写的。我在那里尝试过上述答案。但是,它不起作用。Type.GetType(“EnumDemo.EnumClass.Colors”)给出了null,我认为这不是一个重复的问题。枚举不在任何类内。但是,在我的例子中,它是在一个类中。我有问题,只是因为我的枚举在一个类中。既然你似乎知道枚举的类型,你可以直接选择类型,我已经相应地修改了我的答案。谢谢你的帮助。但是,我的情况不同。我在编译时不知道枚举名(EnumClass.Colors)。我在运行时得到它:
var EnumVal=GetEnumValue(“EnumDemo.EnumClass+Colors”,“Red”)
?是GetEnumValue(“EnumDemo.EnumClass+Colors”,“Red”)是工作的enumValue=(int)Enum.Parse(typeof(Enum),enumStringName);
public static int GetEnumValue(string ItemName)
{
    return (int)Enum.Parse(typeof(EnumClass.Colors), ItemName);
}