2014-06-15 2 views
0

시나리오 : 특정 메소드가있는 App.Config 파일이 있으며이를 Reflection을 통해 호출하려고합니다. 이 작업을 수행하는 중에 유형의 매개 변수를 해당 메소드에 전달할 필요가 있습니다.Type []에 매개 변수 유형의 배열을 전달하는 방법?

ParameterInfo[] parameters = magicType.GetMethod("ItsMagic").GetParameters(); 

그러나 나는 다음과 같은 기능이 배열을 넣어하는 방법을 모른다 : 나는이 같은 런타임에 해당 메서드의 매개 변수 유형의 목록을 검색하고있어 그것은 다음과 같은 결과

magicType.GetMethod("ItsMagic", new Type[] {parameters.Cast<Type>()}); 

오류 :

오류 : 'System.Collections.Generic.IEnumerable'형식을 'System.Type'형식으로 암시 적으로 변환 할 수 없습니다. 명시 적 변환이 존재합니다 (캐스트가 누락 되었습니까?)

어떤 방법으로이를 달성 할 수 있습니까?

+0

나도 몰라,하지만 당신은 불필요한 작업 ...'magicType.GetMethod 할 것 ("ItsMagic")를 '이미 당신에게 * MethodInfo * 객체를 가져옵니다. * MethodInfo * 객체에서 얻은 매개 변수를 사용하여 동일한 메서드에 대해 다시 type 객체를 쿼리하면 동일한 * MethodInfo * 객체 만 다시 반환됩니다. 또한 * ParameterInfo * 유형을 * System.Type * 유형으로 캐스트 할 수 없습니다. 배열의 * ParameterInfo * 객체에서 매개 변수 유형을 얻는 방법에 대한 L.B.의 대답을보십시오 ... – elgonzo

답변

2
parameters.Select(p=>p.ParameterType).ToArray() 

magicType.GetMethod("ItsMagic", parameters.Select(p=>p.ParameterType).ToArray()); 
+0

위의 코드에서 몇 가지 변경을했습니다. 다시 시도하십시오. – Sadiq

+0

@Sadiq, * ParameterInfo *가 * System.Type *에서 상속되지 않으므로 * ParameterType * 개체를 * System.Type *으로 캐스팅 할 수 없습니다. L.B.의 답변에 어떤 문제가 있습니까? – elgonzo

+0

물론 문제 없습니다, 감사합니다 L.B – Sadiq

관련 문제