Delegate.Combine和lambda表达式

Yol*_*ola 2 c# lambda delegates

假设我有这个代表的声明:

    private delegate UInt32 Feedback(UInt32 value);
Run Code Online (Sandbox Code Playgroud)

在这里我尝试将它与lambda表达式一起使用

    feedback = (Feedback)Delegate.Combine(feedback, 
        value => { Console.WriteLine("Lambda item = " + value); return 0; });
Run Code Online (Sandbox Code Playgroud)

但我得到错误:无法将lambda表达式转换为类型'System.Delegate',因为它不是委托类型

但它以这种方式工作

    feedback = (Feedback)Delegate.Combine(feedback, 
        new Func<UInt32, UInt32>(value => { Console.WriteLine("Lambda item = " + value); return 0; }));
Run Code Online (Sandbox Code Playgroud)

我以为C#编译器必须自己做.

xan*_*tos 5

feedback = (Feedback)Delegate.Combine(feedback, 
    (Feedback)(value => { Console.WriteLine("Lambda item = " + value); return 0; }));
Run Code Online (Sandbox Code Playgroud)

您必须明确说出lambda函数的类型,否则编译器不知道它具有什么类型.例如,请参阅http://blogs.msdn.com/b/jaredpar/archive/2007/12/14/c-lambda-type-in​​ference.aspx

C#类型推断的一个限制是您不能使用它来推断lambda表达式的类型.例如,以下代码将无法编译

var f = () => 4;
Run Code Online (Sandbox Code Playgroud)