Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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# 无法将lambda表达式转换为类型';代表';因为它不是委托类型_C#_Lambda_Delegates - Fatal编程技术网

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

C# 无法将lambda表达式转换为类型';代表';因为它不是委托类型,c#,lambda,delegates,C#,Lambda,Delegates,我与C#中的匿名代表lambda有问题。我刚刚将应用程序转换为C#5,代表们对我大发雷霆。任何帮助都会很好。具体错误是: 无法将lambda表达式转换为“Delegate”类型,因为它不是 委托类型 我也试过了 this.Invoke(() => {this.UpdateUserList();}); 我不确定问题出在哪里,因为在我将项目从VisualStudio2008移动到VisualStudio2015之前,这个问题已经解决了 再次感谢你的帮助 Invoke方法需要一个委托类型实例,

我与C#中的匿名代表lambda有问题。我刚刚将应用程序转换为C#5,代表们对我大发雷霆。任何帮助都会很好。具体错误是:

无法将lambda表达式转换为“Delegate”类型,因为它不是 委托类型

我也试过了

this.Invoke(() => {this.UpdateUserList();});
我不确定问题出在哪里,因为在我将项目从VisualStudio2008移动到VisualStudio2015之前,这个问题已经解决了


再次感谢你的帮助

Invoke方法需要一个委托类型实例,因为您使用的是lambda表达式,它无法自动将该表达式转换为类似new Delegate()的内容,因为委托没有公共构造函数。使用

this.Invoke(new Action(() => {this.UpdateUserList();}));
应该解决问题,因为Action是Delegate的子类。为了在使用Invoke时消除多余的新操作(…),您可以编写一组将参数作为操作的扩展方法,这样新操作(…)将由C#编译器处理,因此您不必每次都编写它,从而使代码更干净


如果您正在使用Invoke进行一些异步操作,这些操作可能涉及到其他线程的任务并行库(TPL)和基于任务的异步模式(TAP),后者已经内置了对C#和Visual Basic.NET的支持,那么使用wait将不再需要调用Invoke()并允许您在后台运行一些操作以释放UI。

这是指什么?Invoke()的方法签名是什么?这真的有效吗?Lambda表达式不能转换为委托AFAIK。从来没有。这可能是重复的工作。好主意,这是一个扩展。实际上,我可能会将它构建到我已经建立的一些库中。自2011年以来未更新此代码。
this.Invoke(new Action(() => {this.UpdateUserList();}));