假设我有这个委托(delegate)的声明:
private delegate UInt32 Feedback(UInt32 value);
在这里我尝试将它与 lambda 表达式一起使用
feedback = (Feedback)Delegate.Combine(feedback,
value => { Console.WriteLine("Lambda item = " + value); return 0; });
但我得到错误:无法将 lambda 表达式转换为类型“System.Delegate”,因为它不是委托(delegate)类型
但它是这样工作的
feedback = (Feedback)Delegate.Combine(feedback,
new Func<UInt32, UInt32>(value => { Console.WriteLine("Lambda item = " + value); return 0; }));
我认为 C# 编译器必须自己完成。
最佳答案
feedback = (Feedback)Delegate.Combine(feedback,
(Feedback)(value => { Console.WriteLine("Lambda item = " + value); return 0; }));
您必须明确说明 lambda 函数的类型,否则编译器不知道它的类型。例如参见 http://blogs.msdn.com/b/jaredpar/archive/2007/12/14/c-lambda-type-inference.aspx
One of the limitations of C# type inference is that you cannot use it to infer the type of a lambda expression. For example, the following code will not compile
var f = () => 4;
关于c# - Delegate.Combine 和 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28691357/