嵌套的lambdas语法

时间:2016-10-13 06:31:41

标签: c#

我正在四处寻找并注意到以下内容无法编译:

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

这对我来说似乎是一个有效的陈述,以下等效(?)语句在python中起作用:

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

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

1 个答案:

答案 0 :(得分:4)

这是可能在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)没有指定类型。