我有一個表達的getter這樣的:轉換通用吸氣表達反對吸氣式
var expression =() => SomeInstance.Nr;
它傳遞給方法:
public void AddExpression<T>(Expression<Func<T>> func)
現在我想轉換是通用的表達
Expression<Func<object>>
我不是很肯定,如果我甚至可以做到這一點。我想是這樣的:
var converted = Expression.Convert(func, typeof(object));
var objectExpression = Expression.Lambda<Func<object>>(Expression.Call(converted.Method), func.Parameters);
但是,當我打電話
var number = objectExpression.Compile()();
它不會返回屬性值。
的代碼可以在這裏進行測試: http://volatileread.com/utilitylibrary/snippetcompiler?id=25062
更新: 看來,調用上纏繞有第二次:
var converted = Expression.Convert(func, typeof(object));
var objectExpression = Expression.Lambda<Func<object>>(Expression.Call(converted.Method), func.Parameters);
var anotherDelegate = objectExpression.Compile().Invoke(); // would have expected the value here
var value = ((Delegate)anotherDelegate).DynamicInvoke(); // this now does return the value
我沒有'轉儲'可用這是在.net 4.5? (我在4.0上工作) – derape
@derape這只是LINQPad輔助方法 - 它就像一個超級權力的'Console.WriteLine' :) – Luaan
Thanks =)適合我! – derape