将MemberInfo []转换为Enum

时间:2012-05-26 07:25:40

标签: c# reflection enums

我一直在寻找,但没有找到解决方案。我在GAC中有一个程序集。我必须使用反射加载它。在那之后,我需要得到并向Enum发表讲话。但我可以得到MemberInfo[]。我不明白如何将MemberInfo[]转换为Enum

我有这样的代码:

//test assembly contains 
public class MyClass
{
    public enum MyEnum 
    {
        MyVavue, 
        MyValue2
    }
}

Assembly s = Assembly.Load("test");
Type type = s.GetTypes()[1];
MemberInfo[] memberInfos = type.GetMembers(
    BindingFlags.Public | 
    BindingFlags.Static);

//I need to convert memberInfos to MyEnum
//and after that receive ---> MyEnum.MyValue <---  

3 个答案:

答案 0 :(得分:5)

您应该只使用Enum.GetValues。这正是它的作用 - 使用反射来获取枚举字段:

Assembly s = Assembly.Load("test");
Type type = s.GetTypes()[1];
object[] values = Enum.GetValues(type);
object myValue = values.First(v => v.ToString() == "MyValue");

答案 1 :(得分:3)

使用GetFields代替GetMembers,然后拨打GetValue(null)以获取枚举值。

答案 2 :(得分:1)

你可以使用

foreach(var member in memberinfos)
{
 Enum.Parse(typeof(MyEnum),member.Name)
}


我还没有尝试..但或多或少的语法是相同的