2012-05-26 2 views
4

잠시 동안 검색했지만 해결책을 찾지 못했습니다. GAC에 어셈블리가 있습니다. 리플렉션을 사용하여로드해야합니다. 그 후에 나는 Enum에게 가서 이야기해야합니다. 그러나 대신 나는 단지 MemberInfo[]을 얻을 수 있습니다. MemberInfo[]Enum으로 변환하는 방법을 모르겠습니다.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 <--- 
+0

당신은 GAC에서 어셈블리에 열거의 MemberInfo가 얻을하려고 : 사용의 반사를 열거 필드를 얻을 수 - 즉, 무엇을 정확히? 아니면 100 % 확실하지 않기 때문에 정확히 무엇을 요구하고 있습니까? –

+0

나는 Enum을 얻으려고 노력하고있다. 예를 들어 주소. MyEnum.GAC의 한 명은 어셈블리를로드 할 수 있습니다. – Alexandr

+0

짧지 만 완전한 예 또는 달성하고자하는 것이 실제로 도움이 될 것입니다. 들판, 부동산, 다른 것을 찾으려고합니까? –

답변

5

같은 것입니다.

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

값은 두 개의 결과를 제공하지만 정의되지 않았으며 MyEnum 유형을 가지고 있지 않습니다. 그것은 다른 어셈블리에 존재합니다. – Alexandr

+0

답변을 업데이트했습니다. 이것은 당신을 위해 작동해야합니다. –

+0

은 캐스팅에 문제가있는 것처럼 보입니다.) 좋은 답변을 주셔서 감사합니다. – Alexandr

2

사용 GetFields 대신 GetMembers을 다음 열거 값을 얻을 수 GetValue(null)를 호출합니다.

0

당신은 내가 아직 시도 havent 한

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


을 사용할 수 있습니다 MAYB ..하지만 더 많거나 적은 구문은 단순히 Enum.GetValues를 사용해야합니다

관련 문제