【问题标题】:Error passing both a dynamic object and an Action to a function将动态对象和动作都传递给函数时出错
【发布时间】:2018-01-23 14:24:10
【问题描述】:

我正在尝试将动态对象 一个动作传递给一个函数。 (下面是一个简单的测试)但是,我得到以下编译时错误:

如果不先将 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);
    }

【问题讨论】:

    标签: c# dynamic lambda


    【解决方案1】:

    当然 - 完全按照编译器所说的去做 - 将 lambda 表达式转换为具体类型:

    Calc(obj, (Action<int>)(result => Console.Write("Result: " + result)));
    

    您必须这样做的原因是 lambda 表达式没有类型 - 编译器必须知道您尝试将其转换为什么委托(或表达式树)类型。如果您要调用的方法在执行时才被选择,则它不能这样做,当另一个参数是动态的时就是这种情况。

    【讨论】:

      猜你喜欢
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多