当我运行这两行代码时,我得到了我期望的结果:
Func<int, int> sqr = x => x * x;
Console.WriteLine(sqr(3));
但我不明白为什么将返回指定为第二个参数?它是怎么运行的?定义委托时,必须是:
return-type delegate delName (parameters);
但是,使用Func委托,返回类型也被指定为输入参数。任何人都能解释一下这一切是如何运作的吗?如果可能的话,使用指定返回类型作为输入参数的相同概念编写一个小示例。我发现很难理解幕后发生的事情。
提前致谢:)
答案 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