14 Stimmen

Aufrufen statischer Methoden, die allgemeine Parameter enthalten, mit Reflection

Beim Ausführen des folgenden Codes erhalte ich die Fehlermeldung "Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is true."

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

Der obige Code ist nur eine skalierte Version des tatsächlichen Problems, das ich konfrontiert bin. Bitte helfen Sie.

33voto

AakashM Punkte 60642

Sie rufen an MethodInfo.MakeGenericMethod aber der Rückgabewert wird weggeworfen. Die Rückgabewert selbst ist die Methode, die Sie Invoke :

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

3voto

Andras Zoltan Punkte 41403

Das einzige Problem mit dem Code, den Sie veröffentlichen, ist:

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

Sollte sein

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

Du nimmst keinen Bezug auf das "gebackene" Gattungsmerkmal.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X