我有一个system.reflection.methodinfo,希望有一个方法创建一个表示该方法的委托(最好是一个func或一个action),给定一个实例来调用它。
因此,理想情况下,我希望类似于以下psuedo代码:
public TDelegate GetMethod<TDelegate>(MethodInfo methodToRepresent, object instanceToInvokeOn)
{
return (TDelegate)((parameters....) => methodToRepresent.Invoke(instanceToInvokeOn, all parameters in an object[]));
}
其中tdelegate表示所表示方法的签名。如果签名不匹配,则应引发异常。
我意识到用一个简单的lambda表达式可能无法实现这一点,因为它的参数类型必须在编译时已知。也许我需要从头开始构造一个委托?是否可以通过分别指定委托的主体和参数来创建委托?
谢谢你
最佳答案
我真的不明白你的问题。但也许你想要这个:
public TDelegate GetMethod<TDelegate>(MethodInfo methodToRepresent, object instanceToInvokeOn)
where TDelegate:class
{
return (TDelegate)(object)Delegate.CreateDelegate(typeof(TDelegate), instanceToInvokeOn, methodToRepresent);
}