无法理解C#lambda表达式

时间:2015-09-22 01:02:37

标签: c# lambda

我已经学习了很长一段时间,但是刚开始学习C#。我真的很难理解下面的程序是如何产生答案的.101。如果有人能指导我,那就太棒了。

void Main() {
 var x = F(n => n+1, n => n*n)(10);
 Console.WriteLine("{0}", x);
}

public Func<int,int> F (Func<int,int>p, Func<int,int>q) {
 return x => p(q(x));
}

1 个答案:

答案 0 :(得分:4)

首先,类型Func<T,U>是具有类型T的单个输入和类型U的输出的函数的委托类型。所以在这个例子中,函数F有两个输入:p是一个函数,它接受一个整数作为输入并返回一个整数作为输出,就像q一样。函数F也返回Func<int, int>个对象。 F返回的函数是首先调用q的函数,然后调用p并将q的输出传递到p

Main中,添加一个(n => n + 1)的函数作为p的值传入,而square函数(n => n * n)传入{ {1}}。这意味着q返回一个新函数,该函数接受其输入,将其平方(执行F的操作)然后添加一个(执行q的操作)。

最后,p作为此函数的参数提供,因此结果为10