How Can I Create an Action Delegate from Methodinfo?
I Want to Get an Action Delegate from a Methodinfo Object. Is This Possible? 2 Answers Use Delegate. Createdelegate: // Static Method Action Action = (Action)...
I want to get an action delegate from a MethodInfo object. Is this possible?
2 Answers
// Static method
Action action = (Action) Delegate.CreateDelegate(typeof(Action), method);
// Instance method (on "target")
Action action = (Action) Delegate.CreateDelegate(typeof(Action), target, method);
For an Action<T> etc, just specify the appropriate delegate type everywhere.
In .NET Core, Delegate.CreateDelegate doesn't exist, but MethodInfo.CreateDelegate does:
// Static method
Action action = (Action) method.CreateDelegate(typeof(Action));
// Instance method (on "target")
Action action = (Action) method.CreateDelegate(typeof(Action), target);
This seems to work on top of John's advice too:
public static class GenericDelegateFactory
{
public static object CreateDelegateByParameter(Type parameterType, object target, MethodInfo method) {
var createDelegate = typeof(GenericDelegateFactory).GetMethod("CreateDelegate")
.MakeGenericMethod(parameterType);
var del = createDelegate.Invoke(null, new object[] { target, method });
return del;
}
public static Action<TEvent> CreateDelegate<TEvent>(object target, MethodInfo method)
{
var del = (Action<TEvent>)Delegate.CreateDelegate(typeof(Action<TEvent>), target, method);
return del;
}
}