2009-12-11 9 views
5

Tengo un método (FYI, estoy usando C#), aceptando un parámetro de tipo "Func", digamos que se define como tal:método Pass, creado con la reflexión, como parámetro Func

MethodAcceptingFuncParam(Func<bool> thefunction); 

he definido la función de pasar en cuanto tal:

public bool DoStuff() 
{ 
    return true; 
} 

que pueda llamar fácilmente esto como tal:

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

esto funciona como debería, hasta el momento tan bueno.

Ahora, en lugar de pasar en el método DoStuff(), me gustaría crear este método mediante la reflexión, y pasar esta en:

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

=> esto funciona, puedo conseguir la MethodInfo correctamente.

Pero aquí es donde estoy atascado: Ahora me gustaría hacer algo como

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

En otras palabras, me gustaría pasar en el método acabo de recibir a través de la reflexión como el valor de el parámetro Func del método MethodAcceptingFuncParam. ¿Alguna pista sobre cómo lograr esto?

Respuesta

9

Puede usar Delegate.CreateDelegate, si los tipos son apropiados.

Por ejemplo:

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

Tenga en cuenta que si la función se ejecuta mucho en MethodAcceptingFuncParam, esto será mucho más rápido que llamar mi.Invoke y proyectando el resultado.

1

Uso de invocación:

Cuestiones relacionadas