函数是怎样的?隐式转换为Expression>

本文关键字:Expression Func 转换 函数 | 更新日期: 2023-09-27 17:54:09

我不明白这里发生了什么:

这两行编译:

 Func<object> func = () => new object();
 Expression<Func<object>> expression = ()=>new object();

但这不是:

 expression = func;

LambdaExpressionExpression<TDelegate>上没有将委托转换为表达式的隐式操作符,因此必须发生其他事情才能使赋值工作。这是什么?

函数是怎样的?隐式转换为Expression<Func<T>>

这不是通常意义上的隐式转换-这是编译器的技巧。编译器从上下文中检测到哪一个是预期的,然后将其编译为委托(类上的隐藏方法)或表达式(通过调用System.Linq.Expressions.Expression上的方法构造表达式的代码块)。

这就是为什么你不能直接将lambda表达式赋值给objectvar类型的变量,因为编译器必须能够知道你是指委托还是表达式。