2012-06-02 1 views
0

표현식 (Microsoft.Scripting.Ast)을 사용하여 실험하고 있는데 다른 인스턴스 메서드에 대리자를 사용하여 대리자 변수를 할당 한 다음 해당 대리자를 호출해야합니다. 불행하게도, 난 아주 우둔 해요 :(내가 놓친 경우Ast.Expressions를 사용하여 대리자 만들기

var @delegate = Expression.Variable (typeof (Delegate)); 
var expression = Expression.Block(
    new [] { @delegate }, 
    Expression.Assign(@delegate, /* MISSED PART */), 
    Expression.Call(@delegate, typeof(Delegate).GetMethod("DynamicInvoke")) 
); 

을 가르쳐주세요.이 최근 인턴쉽을 시작 내입니다. 아무 의미가 없을 수도 있습니다 그래서 모든 ^^

+0

: 대답은 여기에

Expression.GetDelegateType(...)MethodInfo에 대한 대리자를 생성하는 코드입니다했다 시작을 위해 Block 메소드의 결과를 사용하지 않습니다 ... –

+0

죄송합니다, 실수. _Btw, 당신 책에 감사드립니다. 바로 옆에 있어요;) _ – Matthias

+0

"normal"식 트리 (System.Linq.Expressions)보다는 btw가 Microsoft.Scripting.Ast를 사용하고 있습니까? 그렇다면 특별한 이유가 있습니까? (다행히 책을 좋아해, btw.) 나는 Microsoft.Scripting.Ast에 대한 경험이 없지만, 당신이하려는 일에 대해 더 완전한 예제를 제공 할 수 있다면 System .Linq.Expressions ... –

답변

0

그럼 당신

public static Type GetDelegateType (this MethodInfo methodInfo) 
{ 
    var parameterTypes = methodInfo.GetParameters().Select (x => x.ParameterType); 
    var returnType = new[] { methodInfo.ReturnType }; 

    var delegateTypes = parameterTypes.Concat (returnType).ToArray(); 
    return Expression.GetDelegateType (delegateTypes); 
}