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”是“变量”,但此处被当做“方法”来使用
 var exp = lambda.Compile() as <Func<T, object, object>>;

这么写就可以直接调用了

 var exp = lambda.Compile() as Func<T, object, object>;