업데이트 :이하지 내가이 어떤 수의 실행시에 다음과 같은 확장 방법매개 변수 문제
public static string ExtMethod(this object self, object myparameter);
라고 한
:(일, 내가 당하고 바보 주어진
내가 "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);
, ": 가지의 방법, 나는이 모든 가능성을 생각한다
Expression<Func<T, object>> expr = x => [myparameter expression here]
내가이 일 것이라고 생각 :
"하고는"
T
는 "때문에
x
이
myparameter
에 사용되는 두 경우의
, 난 내가 형식의 대리자를 만드는 데 필요한 생각
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)
그것을 잘 작동합니다.
어떻게 해결할 수 있습니까?
감사
이것은 하드 코어입니다 ... 여전히 문제가 무엇인지 이해할 수 없습니다. :) –
개체에 대한 확장 메서드는 거의 좋은 아이디어가 아닙니다. 와 표현 트리 (대리인 아님)를 만드는 (보행자) - 그러나 지금보고 ... –
@Marc 이것은 단지 의사 코드입니다.) –