Saltar al contenido

No se puede convertir la expresión lambda para escribir ‘objeto’ porque no es un tipo de delegado

No olvides que en las ciencias informáticas un problema puede tener más de una soluciones, de igual modo aquí compartiremos lo mejor y más óptimo.

Solución:

Lo mejor sería tener el diccionario fuertemente tipado, pero si primero asigna el lambda a un lambda (delegado) específico, debería funcionar (porque el compilador conoce el formato del delegado):

Action inp = InProgress => base.InProgress = InProgress;
dict.Add("InProgress", inp);

O al lanzarlo directamente, el mismo efecto

dict.Add("InProgress", (Action)(InProgress => base.InProgress = InProgress));

Por supuesto, tener un formato de diccionario como objeto es discutible, ya que deberá conocer el formato de delegado para poder usarlo.

Recibí este error cuando me faltaba

using System.Data.Entity;

Aunque la solución por @Mi nombre es completamente válido por sí mismo, hay un truco adicional que puede ser útil en algunas situaciones (ciertamente lo fue para mí): si está convirtiendo múltiples lambdas usando esta técnica, puede considerar el molde como un método de ayuda, a lo largo de las líneas de

object myDelegateToObject ( Action action ) 
    return action; // autocast to `object` superclass, no explicit cast needed

y luego llamarlo simplemente

dict.Add("InProgress", myDelegateToObject(InProgress => base.InProgress = InProgress));

Puede ahorrarle tiempo más adelante: si decide cambiar las firmas, tendrá que hacerlo en un solo lugar.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *