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