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;