什么是func委托?

时间:2010-09-04 04:31:55

标签: c# delegates lambda

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

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

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

return-type delegate delName (parameters);

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

提前致谢:)

3 个答案:

答案 0 :(得分:3)

您正在谈论的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)); 

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

答案 1 :(得分:2)

Eric Lippert在这篇

上发表了一篇很好的文章

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

答案 2 :(得分:0)

它不是“输入参数”,而是Generics