8

我一直在寻找一段时间,但没有找到解决方案。我在 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 <---  
4

3 回答 3

7

使用GetFields代替GetMembers然后调用GetValue(null)来获取枚举值。

于 2012-05-26T09:39:43.727 回答
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");
于 2012-05-26T09:54:51.783 回答
3

你也许可以使用

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


我还没有尝试过..但或多或少的语法是一样的

于 2012-05-26T09:50:20.053 回答