c# - 了解 lambda 参数语法

标签 c# .net lambda

 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/

相关文章:

c# - 在使用 MigraDoc 生成的 PDF 中无法显示圆加号 (⊕)

c# - 如何使用 Linq 和 Entity Framework 获得不同的、不区分大小写的列表

.net - PowerShell 通用集合

.net - 在源代码管理中管理我的数据库

concurrency - 使用 lambda 解锁

c# - 为什么 System.ServiceModel.Persistence 过时了?

c# - 是否可以使用 StreamWriter c# 水平附加文本?

asp.net - “ToArray”不是 'String' 的成员

java - Hibernate 和 java 8 lambda 的

python - 将列值传递到 Pandas 中的 lambda 函数