2011-01-13 11 views
0

Ok, das ist, was ich tun möchte:Aufruf Kompilierung-geprüft Methode mit dynamischen Argumente in C#

public static void CallStaticMethod(Type myType, String methodName, Object[] parameters) 
{ 
    MethodInfo m = myType.GetMethod(methodName); // make this compile-time safe 
    m.Invoke(null, parameters);     // methodName method is supposed to be static 
} 

Nun myType.GetMethod (methoden) kann zur Laufzeit fehlschlagen, wenn „Methodenname“ nicht existieren.
Gibt es eine Möglichkeit, diese Kompilierzeit sicher zu machen?
(vorausgesetzt die Parameter korrekt sind)

Ich möchte das Verfahren irgendwie so nennen:

CallStaticMethod(()=>MyType.MyMethod(), Object[] parameters) 

Hinweis, dass dies nicht, da Sie die Argumente innerhalb der Lambda-Ausdruck angeben müssen nicht funktioniert .

Mit anderen Worten, ich brauche ein kompilierbares sicheres Handle für eine Methode. Ich kann einen mit typeof() auf einen Typ bekommen, aber ist es für eine Methode möglich?

Antwort

3

Verwenden Sie Funktionszeiger, also Delegaten. Einfaches Beispiel:

delegate int StringIntParse(string value); 

    public static int Main(string[] args) 
    { 
     StringIntParse p = int.Parse; 
     Console.WriteLine(p("34")); 
     Console.WriteLine(p.DynamicInvoke(new object[] { "43" })); 
     return 0; 
    } 

Sie DynamicInvoke auf jedem Delegierten verwenden können, z.B .:

static object InvokeAnyDelegate(Delegate d, params object[] args) 
{ 
    return d.DynamicInvoke(args); 
} 
Verwandte Themen