5

我是 System.Linq.Expresions 的新手,我试图找出这段代码有什么问题:

 var mc = new MyClass();

        ParameterExpression value = Expression.Parameter(typeof(object), "value");
        ParameterExpression xParam = Expression.Parameter(typeof(MyClass), "x");

        Expression<Func<MyClass, object>> e = x => x.Val;

        BlockExpression block = Expression.Block(new[] { xParam, value },
            Expression.Assign(e.Body, value));

        Expression.Lambda<Action<MyClass, object>>(block, xParam, value).Compile()(mc, 5); //I'm getting exception here when Compile()

...

class MyClass
    {
        public object Val
        {
            get;
            set;
        }
        public object OtherVal
        {
            get;
            set;
        }
    }

我只想构建类似 mc.Val = 5 的东西,假设 MyClass 和 object 参数是 lambda 的参数(我不想使用闭包)

4

1 回答 1

8

e.Body引用来自 的参数e。但这是一个不同的参数xParam。两人同名是不够的。它们必须是同一个对象。

在理解中,您尝试使用 lambdas 作为生成表达式的工具来获取表达式。要使该方法起作用,您需要将所有参数替换为e您控制的参数 ( xParam)。你必须保持一致。

于 2012-12-03T20:00:35.973 回答