2009-12-11 14 views
5

ich eine Methode habe (FYI, ich bin mit C#), einen Parameter des Typs „Func“ zu akzeptieren, sagen wir, sie als solche definiert ist:Pass-Methode, mit der Reflektion erzeugt, wie Func Parameter

MethodAcceptingFuncParam(Func<bool> thefunction); 

ich habe die Funktion zu übergeben in als solche definiert:

public bool DoStuff() 
{ 
    return true; 
} 

ich dies leicht als solche bezeichnen kann:

MethodAcceptingFuncParam(() => { return DoStuff(); }); 

Dies funktioniert, wie es sollte, so weit so gut.

Statt nun in der DoStuff() Methode übergeben, würde Ich mag diese Methode durch Reflexion zu schaffen, und übergeben Sie diese in:

Type containingType = Type.GetType("Namespace.ClassContainingDoStuff"); 
MethodInfo mi = containingType.GetMethod("DoStuff"); 

=> das funktioniert, ich richtig die Method bekommen kann.

Aber das ist, wo ich bin stecken: Ich möchte jetzt so etwas wie

MethodAcceptingFuncParam(() => { return mi.??? }); 

Mit anderen Worten tun, ich möchte in der Methode zu übergeben ich durch Reflexion als Wert nur bekam für der Func-Parameter der MethodAcceptingFuncParam-Methode. Irgendwelche Hinweise, wie man das erreicht?

Antwort

9

Sie können Delegate.CreateDelegate verwenden, wenn die Typen geeignet sind.

Zum Beispiel:

var func = (Func<bool>) Delegate.CreateDelegate(typeof(Func<bool>), mi); 
MethodAcceptingFuncParam(func); 

Beachten Sie, dass, wenn die Funktion eine Menge in MethodAcceptingFuncParam ausgeführt wird, diese viel schneller sein wird als mi.Invoke aufrufen und das Ergebnis Gießen.

1

Verwendung Invoke:

Verwandte Themen