2013-09-27 58 views
0

我需要在這個問題的前面說明我是一個noob,當談到動態表達式。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); 

也許你需要的類型撥弄了一下,你可以從Lambda和DynamicInvoke而不是調用刪除通用。我在強制類型化了我使用MakeGenericType,GetConstructor等創建的通用對象。

相關問題