【发布时间】:2019-07-10 15:55:05
【问题描述】:
在下面的示例中,相同的 lambda 可以作为 Expression 保存在 test 中,但当它来自 Func 时无法编译:
Func<int> func = () => 2;
Expression test1 = (Expression<Func<int>>)(() => 2);
Expression test2 = (Expression<Func<int>>)(func); //does not compile
为什么 lambda 可以直接转换为 Expression,但表示为 Func 时不能?
【问题讨论】:
-
这是一个编译器技巧。编译器解析 lambda 并将其转换为表达式。它不能通过委托来做到这一点。
-
@LasseVågsætherKarlsen 到目前为止,我最喜欢你的评论,我认为它以简单的方式解决了问题。
标签: c# lambda expression func