繁体   English   中英

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

[英]How do I fix 'compiler error - cannot convert from method group to System.Delegate'?

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

 void ExecuteHandler(object sender, ExecutedRoutedEventArgs e)
 {
 }

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

我猜有多个 ExecuteHandler 具有不同的签名。 只需将您的处理程序转换为您想要的版本:

CommandManager.AddExecuteHandler(this, (Action<object,ExecutedRoutedEventArgs>)ExecuteHandler);

您不能直接将“方法”作为参数传递,您需要传递表达式。 您可以将方法包装到委托中:

CommandManager.AddExecutedHandler(this, new ExecutedRoutedEventHandler(ExecuteHandler));
CommandManager.AddExecutedHandler(this, (Action<object,ExecutedRoutedEventArgs>) ExecuteHandler);

或者成为lambda - 这是我个人的最爱,因为你不需要记住一个委托名称:

CommandManager.AddExecutedHandler(this, (s, e) => ExecuteHandler(s, e));

由于完全不同的问题,我收到此错误。

        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...' 的两个参数是不同类型的委托。 GetOperationType 参数没有问题,而 GetSqlConnection 出现“无法从方法组转换”错误。
在尝试其他答案中提到的转换技巧后,错误更改为 System.Data.SqlClient 未引用。 解决参考问题后,我可以摆脱演员阵容。 也就是说,错误是错误的。 转换技巧对让我看到真正的错误很有用,但转换本身并不是必需的。 似乎真正的错误几乎可以是任何事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM