我在四处闲逛,发现以下代码无法编译:
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/