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

C# 如何修复';编译器错误-无法从方法组转换为System.Delegate';?,c#,delegates,C#,Delegates,错误1参数2:无法从“方法组”转换为“System.Delegate”我猜有多个具有不同签名的ExecuteHandler。只需将处理程序强制转换为您想要的版本: public MainWindow() { CommandManager.AddExecutedHandler(this, ExecuteHandler); } void ExecuteHandler(object sender, ExecutedRoutedEventArgs e) { } CommandMa

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

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

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

 void ExecuteHandler(object sender, ExecutedRoutedEventArgs e)
 {
 }
CommandManager.AddExecuteHandler(此,(操作)ExecuteHandler);

由于一个完全不同的问题,我出现了这个错误

CommandManager.AddExecuteHandler(this, (Action<object,ExecutedRoutedEventArgs>)ExecuteHandler);
“新摄取…”的两个参数都是不同类型的委托。GetSqlConnection出现“无法从方法组转换”错误时,GetOperationType参数没有问题。

尝试其他答案中提到的强制转换技巧后,错误变为System.Data.SqlClient not Reference。在解决了参考问题后,我可以摆脱演员阵容。也就是说,错误是错误的。施法技巧很有用,让我知道真正的错误是什么,但施法本身并不必要。似乎真正的错误几乎可以是任何东西。

明白了-新的委托类型:CommandManager.AddExecutedHandler(这是新的ExecutedRoutedEventHandler(ExecuteHandler));事实上,即使这是没有必要的,我原来的代码现在似乎工作得很好。我实际上没有两个方法定义。我认为这可能只是VS中的一个错误,错误消息是由一些临时对象文件引起的。奇怪。如果你想让这个方法接受不同的签名委托怎么办?@mireazma让它变得通用?读了你的评论,我意识到我没有正确表达这个问题。我的意思是“如果您希望该方法接受任意签名委托,该怎么办?”。比如将未知签名委托作为参数。如果C#支持变量,泛型就可以工作了。否则我就看不见了。
        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");