如何修复'编译错误 - 无法从方法组转换为System.Delegate'?

时间:2010-03-19 18:56:16

标签: c# delegates

 public MainWindow()
 {
    CommandManager.AddExecutedHandler(this, ExecuteHandler);
 }

 void ExecuteHandler(object sender, ExecutedRoutedEventArgs e)
 {
 }

错误1参数2:无法从'方法组'转换为'System.Delegate'

3 个答案:

答案 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未引用。解决参考问题后,我可以摆脱演员表问题。也就是说,错误是错误的。强制转换技巧有助于让我看到真正的错误,但强制转换本身不是必需的。似乎真正的错误几乎是什么。