我不明白这里发生了什么:
这两行编译:
Func<object> func = () => new object();
Expression<Func<object>> expression = ()=>new object();
但这不是:
expression = func;
LambdaExpression
上没有隐式运算符或 Expression<TDelegate>
将委托(delegate)转换为表达式,因此必须发生其他事情才能使分配工作。这是什么?
最佳答案
这不是通常意义上的隐式转换——它是一种编译器技巧。编译器从上下文中检测哪一个是预期的,然后将其编译为委托(delegate)(类中的隐藏方法)或表达式(通过调用 System. Linq.Expressions.Expression
).
这就是为什么不能直接将 lambda 表达式赋给 object
或 var
类型的变量的原因,因为编译器必须能够了解您指的是委托(delegate)还是表达式。
关于c# - Func<T> 是如何隐式转换为 Expression<Func<T>> 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5862266/