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 に答える