표현

2014-02-27 3 views
3

나는, 나는 다음과 같은 예외가 발생하고 있습니다 생성자가 하나의 매개 변수를 복용 전화를 컴파일 표현 대리자를 만들려고 해요 컴파일 사용표현

var constructorInfo = instanceType.GetConstructors().Skip(1).First(); 

ParameterExpression param = Expression.Parameter(genericArgument, "value"); 
Delegate constructorDelegate = Expression.Lambda(Expression.New(constructorInfo, new Expression[] { param })).Compile(); 

'value'매개 변수가 Expression.Block 내부에 있지 않기 때문에 예외가 수신되고 있다고 생각합니다.

& 매개 변수를 Expression.Block 내에 범위를 지정하려면 어떻게해야합니까?

+0

ctor로 유형 정의를 게시 할 수 있습니까? – Dennis

답변

5

매개 변수 value을 선언하려면 람다 식을 만들 때이 매개 변수를 지정해야합니다 (Expression.Lambda 메서드의 overload 참조). 지금까지 매개 변수화 된 람다 식만 만들었지 만 식에 사용 된 매개 변수는 선언하지 않았습니다. 코드를 변경하면 문제가 해결됩니다.

var lambdaExpr = Expression.Lambda(Expression.New(constructorInfo, 
                new Expression[] { param }), 
            param); 
Delegate constructorDelegate = lambdaExpr.Compile(); 
+0

이것이 제대로 작동하지 않아 아래 답변을 게시했습니다. – AwkwardCoder

+1

@AwkwardCoder : 지금은 잘 작동한다고 들었습니다. 그러나 나는 내 대답과의 차이를 볼 수 없다. 관련 변경 사항은 추가 매개 변수로'Expression.Lambda' 호출에'param '을 추가하는 것으로 보입니다. 어쨌든 작동한다면 작동합니다. – Markus

+0

DOH! - 다시 확인한 후에 작동합니다. – AwkwardCoder