我想将下面的委托类型转换为Action类型,但我收到运行时错误
internal delegate void ExecuteMenuClick(object Sender);
使用反射我得到的方法的MethodInfo具有相同的参数。
void SampleMethod(object Sender){}
现在,我有一个命令类实现,它将Action作为参数。我想创建一个委托并将其传递给命令类,以便调用它。
CommandExecutor loclCommand = new CommandExecutor((Action<object>)Delegate.CreateDelegate(typeof(ExecuteMenuClick), instance, methodinfo);
然而,我最终收到以下错误
Unable to cast object of type 'sampleproject.ExecuteMenuClick' to type 'System.Action`1[System.Object]'.
答案 0 :(得分:1)
您在Delegate.CreateDelegate
的调用中传递了错误的委托类型。您应该使用以下代码,它会传递typeof(Action<object>)
,从而产生正确类型的委托。
CommandExecutor loclCommand = new CommandExecutor((Action<object>)Delegate.CreateDelegate(typeof(Action<object>), instance, methodinfo);