static uint Fibonacci(uint n)
{
return n <= 1 ? n : Fibonacci(n - 1) + Fibonacci(n - 2);
}
Func<uint> fibN = () => Fibonacci(n);
Func<int, int, int> add = (a, b) => a + b;
我理解 add 函数语法:它返回 a + b 语句的 int 结果,其中 int a 和 b 参数“进入”。
但是为什么 fibN 函数有空参数 block () ? n 不是作为参数“转到”这个函数吗?请帮助我对这一刻有一些了解。
最佳答案
你的第一个 lambda:
Func<uint> fibN = () => Fibonacci(n);
没有任何参数。现在它不会编译,因为变量 n 是必需的。该变量可以来自 lambda 参数,也可以来自当前作用域。由于 lambda 没有参数,并且当前作用域中不存在变量 n,因此它不会编译。
要使其编译,您可以执行以下操作:
uint n = 1; // Or any other value
Func<uint> fibN = () => Fibonacci(n);
注意: 使用像第一个 lambda 一样的ambas语句,您需要依赖当前作用域来执行它们。因此,编译的匿名方法不是静态的。另一方面,您的第二个 lambda 语句不依赖于当前范围(因为它使用的所有变量都是 lambda 参数),并且此 lambda 被编译为静态匿名方法。这可能会帮助您了解 lambda 语句是如何编译的。 基本上 lambda 语句被编译成普通的匿名方法。
关于c# - 了解 lambda 参数语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14826887/