表达式:从作用域引用的变量,但它没有定义异常

Dmi*_*par 4 .net linq lambda expression

我是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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

usr*_*usr 7

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

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