Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将lamba表达式转换为类型';系统。代表';因为它不是委托类型_C#_.net_Lambda - Fatal编程技术网

C# 无法将lamba表达式转换为类型';系统。代表';因为它不是委托类型

C# 无法将lamba表达式转换为类型';系统。代表';因为它不是委托类型,c#,.net,lambda,C#,.net,Lambda,我将一个项目导入到VisualStudio中,我想从中检查源代码并对其进行编译实验,但我在同一个CS文件中的大约20个不同位置收到了提到的错误 下面是抛出错误的代码示例部分:(错误是传递给this.Invoke的整个重载) 试试这个: this.Invoke(new MethodInvoker(() => this.CheckVersionInfo())); 只能将lambda表达式转换为特定的委托类型。但在这种特殊情况下,它非常简单-您可以只使用操作(或方法调用程序,或任何不带参数和无

我将一个项目导入到VisualStudio中,我想从中检查源代码并对其进行编译实验,但我在同一个CS文件中的大约20个不同位置收到了提到的错误

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

试试这个:

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

只能将lambda表达式转换为特定的委托类型。但在这种特殊情况下,它非常简单-您可以只使用
操作
(或
方法调用程序
,或任何不带参数和
无效
返回类型的委托类型):

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

if (this.InvokeRequired)
{
  this.Invoke((Action)CheckVersionInfo);
}
或者,将扩展方法添加到
Control
ISynchronizeInvoke
以仅添加
Invoke(Action)
方法或“检查并调用”方法。(在不同的环境中,两者都可能有用。)

老实说,如果你导入的代码基本上是这样的,我会非常紧张。如果代码一开始都没有编译,那么一旦修复了最明显的错误,您对它能正常工作有多大信心


请注意,这不仅仅是不同版本的C#或诸如此类的问题-您发布的代码在任何版本的C#中都不会起作用。

这里有很多信息您发布的代码在任何版本的C#中都不会起作用,我正要问您:)谢谢您的回答,但是当我尝试它时,它给了我一个错误:“使用泛型类型”System.Action“需要1个类型参数”实际上,如果我将.NET版本更改为3.5,它似乎可以工作。此项目使用的是2.0。@user1653653:哦,您使用的是.NET 2.0吗?(非泛型的
Action
类是在.NET 3.5中引入的。)在这种情况下,您可以声明
Action
委托自己,或者将来使用
MethodInvoker
),如果您使用的.NET版本远远落后于当前版本,请在问题中指出:)
if (this.InvokeRequired)
{
  this.Invoke((Action) (() => this.CheckVersionInfo()));
}
if (this.InvokeRequired)
{
  this.Invoke((Action)CheckVersionInfo);
}