2016-06-26 6 views
0

Hallo wie die Frage beschreibt im versucht, eine Methode durch Reflexion aufrufen, die in Ordnung ist und alle, wenn es ein void-Typ war. aber string, bool, etc funktioniert nicht. auch mit einem Rückgabetyp. Ich konnte keine brauchbaren Referenzen finden.Invoke-Methode mit Reflection-Pass-Through-Parametern und erhalten einen Rückgabewert

Ich habe eine Testklasse, die ich einige Testmethoden aufgerufen habe. all die leeren hatten gut funktioniert. aber die anderen riefen überhaupt nicht.

internal class Test 
{ 
    public static void Print() 
    { 
     Console.WriteLine("Test"); 
     Console.WriteLine("Testing an invoke method"); 
    } 

    public static void CalcData() 
    { 
     Console.WriteLine("Test"); 
    } 

    public static void DoSomething(int c, float f) 
    { 
     Console.WriteLine("Test"); 
    } 

    public static string TestString(string s, int p, char f) 
    { 
     return "Happy Days"; 
    } 
} 

in meinem Haupt Methode würde ich t.GetMethod("Print").Invoke(t, null);

nennen, aber ich bin nicht sicher, wie ich in einem Parameter zu übergeben würde anrufen oder sogar einen Rückgabetyp erhalten.

einige Einblicke in diese würde sehr geschätzt werden.

+0

Mögliches Duplikat von [Wie Reflexion verwenden, um Call-Methode nach Namen] (http://stackoverflow.com/questions/3110280/how-to- Use-Reflection-to-Call-Methode-by-Name) –

Antwort

2

Werfen Sie einen Blick auf die Unterschrift von MethodInfo.Invoke

public object Invoke(
    object obj, 
    object[] parameters 
) 

Sie müssen die Parameter des Verfahrens in der parametersobject[] passieren. Beachten Sie, dass die Methode object zurückgibt. Sie müssen sie nur in den Ergebnistyp umwandeln.

Ein Aufruf TestString soll wie folgt aussehen:

var parameters = new object[]{"A string", 10, 'a'}; 
string result = (string) t.GetMethod("Print").Invoke(t, parameters); 
+0

Danke, das hat perfekt funktioniert. Nun, ich musste eine Hand voller Anpassungen machen, aber ich kann jetzt jede Methode über das Netzwerk mit wenigen Einschränkungen aufrufen =) – Krazor