2010-06-16 14 views
12

Podczas wykonywania następującego kodu otrzymuję ten błąd "Operacje późnego wiązania nie mogą być wykonywane na typach lub metodach, dla których ContainsGenericParameters ma wartość true."Wywoływanie metod statycznych zawierających parametry ogólne przy użyciu Reflection

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"); 
    } 
} 

Powyższy kod jest tylko skalowaną wersją rzeczywistego problemu, z jakim się spotykam. Proszę pomóż.

Odpowiedz

22

Dzwonisz pod numer MethodInfo.MakeGenericMethod, ale wyrzucasz wartość zwracaną. Wartość powrót Sama jest metoda chcesz Invoke:

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

Dzięki, że zadziałało. Pominąłem wartość zwracaną przez MakeGenericMethod, zamiast tego wziąłem poprzednią, która nie zawierała ogólnych informacji o typie. – AbrahamJP

3

Jedyny problem z kodem, że post jest:

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

Powinny być

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

You” nie odwołuję się do "upieczonego" rodzaju.

Powiązane problemy