MemberExpression: InvalidOperationExpression переменная 'x' указана из области '', но она не определена

Я использую System.Linq.Expressions

, я пытался создать простое LambdaExpression , которое включает a Выражение члена . Если я создаю MemberExpression явно с помощью API System.Linq.Expressions (например, MakeMemberAccess ), я получу сообщение об ошибке «InvalidOperationExpression variable 'x' это мой код

Expression> expression1, expression2, expression3;
Func fn;
expression1 = (x) => x.Title;
fn = expression1.Compile();//works
fn(c);
MemberExpression m;
m = Expression.MakeMemberAccess(
Expression.Parameter(typeof(Customer), "x"), typeof(Customer).GetProperty("Title"));
expression2 = Expression.Lambda>(m,
    Expression.Parameter(typeof(Customer), "x"));

m = Expression.Property(Expression.Parameter(typeof(Customer),"x"), "Title");
expression3 = Expression.Lambda>(m,
    Expression.Parameter(typeof(Customer), "x"));

fn = expression3.Compile();//InvalidOperationExpression variable 'x' referenced from scope '', but it is not defined
fn = expression2.Compile();//InvalidOperationExpression variable 'x' referenced from scope '', but it is not defined

выражение2 и выражение3 вызывают исключение, когда вызывается метод Compile (), а выражение1 - нет; выражение1 работает. Почему это? Как создать выражение MemberExpression, как в выражениях 2, 3, и заставить их работать (не генерировать исключение), когда я вызываю Compile ()?

Спасибо

8
задан T. Webster 24 May 2011 в 06:17
поделиться