更新:這並不工作,我太傻了:(參數問題
我有以下的擴展方法
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