c# - 嵌套的 lambda 语法

标签 c#

我在四处闲逛,发现以下代码无法编译:

Func<int> a = ((j) => (() => 3 * j))(1);

这对我来说似乎是一个有效的声明,下面的等效(?)声明在 python 中有效:

print (lambda x: lambda: 3 * x)(1)()

这只是运行时处理匿名函数方式的结果吗?

最佳答案

这在 C# 中可能但不是漂亮 - 它需要显式转换和大量括号:

Func<int> a = ((Func<int, Func<int>>)(j => () => 3 * j))(1);

或类似的

Func<int, Func<int>> x = j => () => 3 * j;
Func<int> a = x(1);

我认为这里的问题是 C# 通常无法推断出 lambda 的类型——它只能检查 lambda 是否与分配给它的转换、变量、参数等的类型相匹配。在您的版本中,外部 lambda (x) 没有指定类型。

关于c# - 嵌套的 lambda 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40013807/

相关文章:

c# - XML反序列化为不同的类名

c# - Resharper、ICloneable 且永不为空

c# - 如何使用 lambda 表达 “not in”?

c# - 如何使用 C# 在运行时请求线程的锁和死锁?

c# - 如何在没有文本框的情况下获取键盘事件?

c# - 如何通过 ASP.NET Core 中的依赖注入(inject)获取对 IHostedService 的引用?

c# - 错误: Package 'Microsoft.Azure.WebJobs.Extensions' is incompatible with 'all' frameworks in project '

c# - 如何按键查找/检查字典值

c# - 在 C# 中的类中实现索引 "operator"

c# - XML 序列化不填充数组