hard_to_reg_again 2015-08-29 09:45 采纳率: 0%
浏览 3110

c#关于LambdaExpression的使用

    public List<T> ExpressionTree<T>(List<T> collection, object propertyName, string propertyValue)
    {
        ParameterExpression parameter = Expression.Parameter(typeof(T), "x");

        ParameterExpression value = Expression.Parameter(typeof(string), "propertyValue");

        MethodInfo setter = typeof(T).GetMethod("set_" + propertyName);

        MethodCallExpression call = Expression.Call(parameter, setter, value);

        LambdaExpression lambda = Expression.Lambda(call, parameter, value);
        var exp = lambda.Compile();
        for (int i = 0; i < collection.Count; i++)
        {
            exp.DynamicInvoke(collection[i], propertyValue);//疑问***********
            //exp(collection[i], propertyValue);
        }
        return collection;
    }
            ---------------代码如上, 为什么疑问行只能使用exp.DynamicInvoke(), 
            不能这样exp()?? 
            而 exp是一个委托, 按理可以直接 exp() 的, 这是为什么呢?
            麻烦熟悉的朋友指点下

            使用exp()报错: 错误   2   “exp”是“变量”,但此处被当做“方法”来使用
  • 写回答

2条回答 默认 最新

  • threenewbee 2015-08-29 14:42
    关注
     var exp = lambda.Compile() as <Func<T, object, object>>;
    

    这么写就可以直接调用了

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作