更新:这并不工作,我太傻了:(参数问题
我有以下的扩展方法
public static string ExtMethod(this object self, object myparameter);
在运行时这就是所谓的在任何数量的方式方法,我认为这些都是可能性:
Expression<Func<T, string>> expr = x => x.property.ExtMethod(5);
Expression<Func<T, string>> expr = x => x.property.ExtMethod(new object());
Expression<Func<T, string>> expr = x => x.property.ExtMethod(someMethod());
Expression<Func<T, string>> expr = x => x.property.ExtMethod(x.someMethod());
Expression<Func<T, string>> expr = x => x.property.ExtMethod(x.OtherProperty);
什么,我需要做的是评估“myparameter
”,给予“expr
“和” T
“,因为两种情况x
在myparameter
使用
,我想我需要创建形式的委托:
Expression<Func<T, object>> expr = x => [myparameter expression here]
我认为这会工作:
var extMethodExpr = expr.Body as MethodCallExpression;
var myparameterExpr = extMethodExpr.Arguments[1];
var myparam = Expression.Lambda(myparameterExpr, expr.Parameters).Compile().Invoke(someT)
但不涉及x
的表情时,我
得到
TargetParameterCountException
:(
在这些情况下,如果我这样做:
var myparam = Expression.Lambda(myparameterExpr).Compile().Invoke(someT)
它工作正常。
我该如何解决这个问题?
感谢
这是硬核......还是不明白是什么问题。 :) – 2009-05-24 11:23:06
对象的扩展方法很少是一个好主意;和(迂腐)你正在创建一个表达式树(不是委托) - 但现在看... – 2009-05-24 11:36:20
@Marc这只是伪代码;) – 2009-05-24 11:43:43