2010-06-16 9 views
12

다음 코드를 실행하는 동안이 오류가 발생합니다. "ContainsGenericParameters가 참인 형식 또는 메서드에서 런타임에 바인딩 된 작업을 수행 할 수 없습니다."Reflect를 사용하여 일반 매개 변수를 포함하는 정적 메서드 호출

class Program 
{ 
    static void Main(string[] args) 
    { 
     MethodInfo MI = typeof(MyClass).GetMethod("TestProc"); 
     MI.MakeGenericMethod(new [] {typeof(string)}); 
     MI.Invoke(null, new [] {"Hello"}); 
    } 
} 

class MyClass 
{ 
    public static void TestProc<T>(T prefix) 
    { 
     Console.WriteLine("Hello"); 
    } 
} 

위 코드는 실제로 직면 한 실제 문제의 확장 버전입니다. 도와주세요.

답변

22

MethodInfo.MakeGenericMethod으로 전화를 걸었으므로 반환 값을 버립니다.

MethodInfo genericMethod = MI.MakeGenericMethod(new[] { typeof(string) }); 
genericMethod.Invoke(null, new[] { "Hello" }); 
+0

고마워요. MakeGenericMethod에서 반환 값을 잃어 버렸습니다. 대신 이전 유형의 일반 유형 정보를 포함하지 않았습니다. – AbrahamJP

3

당신이 게시 코드에 대한 유일한 문제는 : :이 반환 값 자체는 Invoke하려는 방법이다

MI.MakeGenericMethod(new [] {typeof(string)}); 

은이어야한다

MI = MI.MakeGenericMethod(new [] {typeof(string)}); 

당신에게 ' '구운'일반에 대한 언급을 포착하지 않습니다.

관련 문제