C# 功能如何<;T>;隐式转换为表达式<;Func<;T>>;?

C# 功能如何<;T>;隐式转换为表达式<;Func<;T>>;?,c#,linq,lambda,expression,linq-expressions,C#,Linq,Lambda,Expression,Linq Expressions,我不明白这里发生了什么: 这两行代码都编译: Func<object> func = () => new object(); Expression<Func<object>> expression = ()=>new object(); LambdaExpression或Expression上没有将委托转换为表达式的隐式运算符,因此必须发生其他事情才能使赋值生效。它是什么?它不是通常意义上的隐式转换-它是一种编译器技巧。编译器从上下文中检测

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

这两行代码都编译:

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

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

LambdaExpression
Expression
上没有将委托转换为表达式的隐式运算符,因此必须发生其他事情才能使赋值生效。它是什么?

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


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

更多。Re是最后一个-另外,它还需要决定委托类型(或委托类型的表达式)使用;
Func
等没有什么特别之处。
 expression = func;