无法将lambda表达式转换为类型"object",因为它不是委托类型

Asd*_*dfg 30 c# linq lambda delegates

我有一个具有bool属性的基类,如下所示:

public abstract class MyBaseClass
{
     public bool InProgress { get; protected set; }
}
Run Code Online (Sandbox Code Playgroud)

我从它继承了另一个类,并尝试将InProgress添加为字典的委托.但它给我一个错误.这就是我的Derived类的样子:

public abstract class MyClass
{
     Dictionary<string, object> dict = new Dictionary<string, object>();
     dict.Add("InProgress", InProgress => base.InProgress = InProgress);

}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

无法将lambda表达式转换为类型"object",因为它不是委托类型

我在这做错了什么?

Me.*_*ame 27

最好的方法是对字典进行强类型化,但如果首先将lambda分配给特定的lambda(委托),它应该可以工作(因为编译器会知道委托格式):

        Action<bool> inp = InProgress => base.InProgress = InProgress;
        dict.Add("InProgress", inp);
Run Code Online (Sandbox Code Playgroud)

或者直接投射,效果相同

       dict.Add("InProgress", (Action<bool>)(InProgress => base.InProgress = InProgress));
Run Code Online (Sandbox Code Playgroud)

当然,具有对象的字典格式是可讨论的,因为您必须知道委托格式才能使用它.


小智 13

我失踪时得到了这个错误

using System.Data.Entity;
Run Code Online (Sandbox Code Playgroud)


小智 5

尽管@Me.Name的解决方案本身完全有效,但在某些情况下还有一个额外的技巧可能会派上用场(对我来说确实如此):如果您使用此技术转换多个 lambda,则可以考虑演员表作为辅助方法,沿着

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

然后简单地调用它

dict.Add("InProgress", myDelegateToObject(InProgress => base.InProgress = InProgress));
Run Code Online (Sandbox Code Playgroud)

以后可能会节省您的时间 - 如果您决定更改以更改签名,则只需在一个地方执行此操作。