Cannot convert lambda expression to type 'object' because it is not a delegate type

Best would be to have the dictionary strongly typed, but if you assign the lambda to a specific lambda (delegate) first, it should work (because the compiler then knows the delegate format):

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

Or by casting it directly, same effect

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

Of course having such a dictionary format as object is discussable, since you'll have to know the delegate format to be able to use it.


I got this error when I was missing

using System.Data.Entity;

Although the solution by @Me.Name is completely valid by itself, there's an additional trick that may come in handy in some situations (it certainly did for me): if you're converting multiple lambdas using this technique, you can factor the cast as a helper method, along the lines of

object myDelegateToObject ( Action<bool> action ) {
    return action; // autocast to `object` superclass, no explicit cast needed
}

and then call it by simply

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

It may save you time later on - if you decide to change to change the signatures, you will have to do so in one place only.