How can I create an Action delegate from MethodInfo?

后端 未结 2 1996
旧时难觅i
旧时难觅i 2020-12-03 04:47

I want to get an action delegate from a MethodInfo object. Is this possible?

相关标签:
2条回答
  • 2020-12-03 04:58

    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;
        }
    }
    
    0 讨论(0)
  • 2020-12-03 05:11

    Use Delegate.CreateDelegate:

    // 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);
    
    0 讨论(0)
提交回复
热议问题