2013-09-27 1 views
0

나는 동적 인 표현에 관해서 내가 멍청하다는 진술로이 질문을 앞에 쓴다. DynamicExpression.ParseLambda를 사용하여 개체에 값을 설정 하시겠습니까?

우리가 물체를 찾은 다음 동적 표현 사용하여 해당 객체의 속성 값을 검색하는 기존의 일부 코드 :

var lambda = System.Linq.Dynamic.DynamicExpression.ParseLambda(instance.GetType(), typeof(object), newExpression.Trim()); 
var result = lambda.Compile().DynamicInvoke(instance); 

그 대신 값을 설정할 수 있는지 궁금 해요을 재산? 이것은 결과 (실제로는 속성 값인 표현식의 결과 임)를 검색하는 대신 대신 속성 값을 설정하려고합니다. 내가 완전히 틀린 나무를 여기에서 짖고 있다고 확신 할 수 없다.

답변

1

당신이 정말 가까이있어 - 바로 다음에 갈 필요가 :

var param = Expression.Parameter(typeof(T), "instance"); 
var lambda = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { param }, typeof(object), newExpression.Trim()); 
var assign = Expression.Lambda<Action<T>>(Expression.Assign(Expression.Property(param, "Property"), lambda.Body)), param); 
assign.Compile().Invoke(instance); 

은 아마 당신이 유형 조금 바이올린 필요, 당신은 람다 및 DynamicInvoke보다는 호출에서 일반을 ​​제거 할 수 있습니다 . 저는 MakeGenericType, GetConstructor 등으로 생성 한 일반 객체에 강력하게 타입을 지정합니다.

관련 문제