无法将lamba表达式转换为类型'System.Delegate',因为它不是委托类型

时间:2013-08-15 06:04:48

标签: c# .net lambda

我将一个项目导入到Visual Studio中,我想查看源代码并进行实验编译,但是我得到了相同CS文件中大约20个不同位置提到的错误。

这是抛出错误的代码的一个示例部分:(错误是传递给this.Invoke的整个重载)。

  if (this.InvokeRequired)
  {
    this.Invoke((Delegate) (() => this.CheckVersionInfo()));
  }

2 个答案:

答案 0 :(得分:4)

您只能将lambda表达式转换为特定的委托类型。在这种特殊情况下,它非常简单 - 你只需使用Action(或MethodInvoker,或任何没有参数和void返回类型的委托类型):

if (this.InvokeRequired)
{
  this.Invoke((Action) (() => this.CheckVersionInfo()));
}

或者只是使用方法组转换来简化事情:

if (this.InvokeRequired)
{
  this.Invoke((Action)CheckVersionInfo);
}

或者,将扩展方法添加到ControlISynchronizeInvoke ,以添加Invoke(Action)方法或“检查并调用”方法。 (在不同的情况下,两者都很有用。)

老实说,如果它基本上像这样破坏了,我会非常紧张你要导入的其余代码。如果代码甚至没有编译开始,那么一旦你修复了最明显的错误,你有多少信心工作

请注意,这不仅仅是C#的不同版本或类似内容的问题 - 您发布的代码永远不会在任何版本的C#中都有效。

答案 1 :(得分:0)

试试这个:

this.Invoke(new MethodInvoker(() => this.CheckVersionInfo()));