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

时间:2012-12-03 19:56:09

标签: .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;
        }
    }

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

1 个答案:

答案 0 :(得分:7)

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

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