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