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.