我知道如果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 };
}
}
注意:我的枚举是在课堂内。
答案 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);
}