我读到C#lambda可以隐式转换为Action或Func,但是lambda不能直接执行Define a lambda function and execute it immediately
例如 :

int n = (()=>5)(); //doesn't work
int n = ((Func<int>)(()=>5))(); //works

那么,lambda的实际类型是什么?为什么不能直接调用它呢?是因为C#类型系统比Haskell或Scala系统更“弱”吗?

最佳答案

Lambda表达式没有类型。它不能,因为它可能在.NET世界中具有任何类型,也不能对lambda参数的类型和结果进行硬编码。现在考虑:

x => x + 1
x可以有什么类型?结果将是什么类型?没有任何一个答案,并且lambda表达式确实可以转换为Func<int, int>Func<double, double>和许多其他具有不同参数的委托(delegate)类型。给lambda表达式指定类型将不允许此类表达式。 C#确实希望允许这样的表达式,因此被设计为不给此类表达式任何类型。

关于c# - C#中lambda的实际类型是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27795832/

10-14 12:13
查看更多