public MainWindow()
{
CommandManager.AddExecutedHandler(this, ExecuteHandler);
}
void ExecuteHandler(object sender, ExecutedRoutedEventArgs e)
{
}
错误1参数2:无法从'方法组'转换为'System.Delegate'
答案 0 :(得分:13)
我猜有多个具有不同签名的ExecuteHandler。只需将处理程序转换为您想要的版本:
CommandManager.AddExecuteHandler(this, (Action<object,ExecutedRoutedEventArgs>)ExecuteHandler);
答案 1 :(得分:1)
您无法直接将“方法”作为参数传递,您需要传递表达式。您可以将方法包装到委托中:
CommandManager.AddExecutedHandler(this, new ExecutedRoutedEventHandler(ExecuteHandler));
CommandManager.AddExecutedHandler(this, (Action<object,ExecutedRoutedEventArgs>) ExecuteHandler);
或 lambda - 这是我个人的最爱,因为你不需要记住一个代表名称:
CommandManager.AddExecutedHandler(this, (s, e) => ExecuteHandler(s, e));
答案 2 :(得分:1)
由于完全不同的问题,我收到了此错误。
var engine = new Ingest(GetOperationType, GetSqlConnection);
private static SqlConnection GetSqlConnection(string instanceCode, string defaultDB)
=> new SqlConnection($"Server={InstanceMap[instanceCode]};Database={defaultDB};Trusted_Connection=True;");
private static Type GetOperationType(string operationName)
=> Type.GetType(typeof(BaseOperation).Namespace + "." + operationName + ", ConditioningEngine.EnginePlugins");
“ new Ingest ...”的两个参数都是不同类型的委托。当GetSqlConnection收到“无法从方法组转换”错误时,GetOperationType参数没有问题。
在尝试了其他答案中提到的强制转换技巧后,错误更改为System.Data.SqlClient未引用。解决参考问题后,我可以摆脱演员表问题。也就是说,错误是错误的。强制转换技巧有助于让我看到真正的错误,但强制转换本身不是必需的。似乎真正的错误几乎是什么。