从String获取枚举

时间:2013-07-23 00:02:35

标签: c# reflection enums

示例:

class foo
{
    byte val = 3;
    string EnumName = "boo";

    Enum boo : byte
    {
        coo = 1,
        doo = 2,
        hoo = 3
    }

    Enum boo2 : byte
    {
        eoo = 3,
        goo = 8
    }
}

我该怎么做:

Console.WriteLine((GetEnum(EnumName)value).ToString()); // GetEnum is not real

EnumName每次都会改变。

预期产出:

当枚举名称为boo时==“hoo”

当枚举名称为boo2 ==“eoo”

编辑: 我打算用它来记录:

给boo2.goo的消息

给boo.coo的消息

发送给boo.doo的消息

2 个答案:

答案 0 :(得分:1)

使用(EnumType) Enum.Parse("boo", typeof(EnumType));

答案 1 :(得分:0)

如果您想获得基于字符串的类型,您可以在整个应用程序域中搜索可用类型,并且可以检查类型是枚举还是名称套件。 拥有正确的类型后,您应该能够获得值/名称,无论您想要什么。 也许这个解决方案有点像锤子,但我认为它适合你的情况。 (我不知道你的应用程序是如何构建的。)

var domain = AppDomain.CurrentDomain;
var assemblies = domain.GetAssemblies();
foreach(var assembly in assemblies)
{
    foreach(Type t in assembly.GetTypes())
    {
        string name = t.Name; // or t. Fullname if you know it
        // you can also check if the type is an Enum, etc...
    }
}