【问题标题】:What is a func delegate?什么是函数委托?
【发布时间】:2011-09-30 23:07:53
【问题描述】:

当我运行这两行代码时,我得到了我期望的结果:

Func<int, int> sqr = x => x * x;
Console.WriteLine(sqr(3)); 

但我不明白为什么将返回指定为第二个参数?它是怎么运行的?当你定义一个委托时,它必须是:

return-type delegate delName (parameters);

但是,对于 Func 委托,返回类型也被指定为输入参数。谁能解释一下这一切是如何运作的?如果可能,请使用将返回类型指定为输入参数的相同概念编写一个小示例。我发现很难理解幕后发生的事情。

提前致谢:)

【问题讨论】:

    标签: c# delegates lambda


    【解决方案1】:

    您所说的System.Func 的完整声明是

    public delegate TResult Func<T, TResult>(T arg)
    

    所以当你这样做时

    Func<int, int> sqr = x => x * x;
    

    您正在声明一个使用 lambda 表达式的方法,该表达式接受一个 int x 并返回 x * x。所以现在sqr 持有对您方法的引用。并在以下行中

    Console.WriteLine(sqr(3)); 
    

    您实际执行该方法并显示输出。

    【讨论】:

      【解决方案2】:

      Eric Lippert 写了一篇很好的文章

      我鼓励你阅读这篇文章,但文章的要点是返回值出现在右侧的原因是它是最自然的位置。它是英语、数学和高阶函数的自然选择。由于历史原因,C# 首先具有返回类型。

      【讨论】:

        【解决方案3】:

        不是“输入参数”,是Generics

        【讨论】:

          猜你喜欢
          • 2012-03-23
          • 1970-01-01
          • 1970-01-01
          • 2013-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多