我正在四处寻找并注意到以下内容无法编译:
Func<int> a = ((j) => (() => 3 * j))(1);
这对我来说似乎是一个有效的陈述,以下等效(?)语句在python中起作用:
print (lambda x: lambda: 3 * x)(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
)没有指定类型。