我正在尝试将动态对象和传递给函数。 (下面是一个简单的测试)但是,我得到以下编译时错误:
如果不首先将lambda表达式转换为委托或表达式树类型,则不能将lambda表达式用作动态分派操作的参数。
其中一个是好的......但不是两个......任何帮助?
void Test()
{
dynamic obj = new System.Dynamic.ExpandoObject();
obj.A = 1;
obj.B = 2;
Calc(obj, (result) =>
{
Console.Write("Result: " + result);
});
}
void Calc(dynamic obj, Action<int> onComplete)
{
onComplete((int)obj.A + (int)obj.B);
}
答案 0 :(得分:3)
当然 - 完全按照编译器的说法 - 将lambda表达式强制转换为具体类型:
Calc(obj, (Action<int>)(result => Console.Write("Result: " + result)));
你必须这样做的原因是lambda表达式没有类型 - 编译器必须知道你试图将它转换为什么委托(或表达式树)类型。如果你要调用的方法在执行时间之前被选中,那么它就不能这样做,这是另一个参数是动态的情况。