c# - Delegate.Combine 和 lambda 表达式

标签 c# lambda delegates

假设我有这个委托(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/

相关文章:

c++11 - 通过引用捕获时如何异步使用 C++11 lambda

c# - 创建 C# Func<> 类型别名

ios - 想要创建一个监听器来检测整个应用程序中的 viewWillAppear 调用

ios - Objective-C:如何为使用方法执行结果的方法提供完成 block

javascript - 在从单击按钮时调用的 ajx 方法调用 Web 服务方法之前验证 session

c# - 在静态类中访问或获取 Autofac 容器

c# - C# 表达式 WPF 中的占位符

c# - 连接到 WCF RESTful 服务时创建 Ssl 服务器凭据时发生 fatal error

c# - 编译器未解析为预期的扩展方法

c++11 lambda高阶函数包装器递归错误