我有一个表达的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