tipo puede operador framework expresiones expresion delegado convertir c# linq lambda expression linq-expressions

c# - operador - no se puede convertir expresion lambda en el tipo delegado



¿Cómo se convierte una función<T> implícitamente a la expresión<Func<T>>? (1)

No entiendo lo que está pasando aquí:

Ambas líneas compilan:

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

Pero esto no lo hace:

expression = func;

No hay un operador implícito en LambdaExpression o Expression<TDelegate> que convierta a un delegado a la expresión, por lo que debe suceder algo más para que la asignación funcione. ¿Qué es?


No es una conversión implícita en el sentido habitual, es un truco de compilación. El compilador detecta cuál se espera del contexto y luego lo compila como un delegado (un método oculto en su clase) o como una expresión (una porción de código que construye la expresión llamando a los métodos en System.Linq.Expressions.Expression ).

Esta es la razón por la que no puede asignar directamente una expresión lambda a una variable de tipo object o var , entre otras cosas, porque el compilador debe poder saber si se refiere a un delegado o una expresión.