2009-06-16 5 views
3

나는 식 트리로C#으로 BinaryExpression을 함께 붙어

Expression<Func<int, int, int>> Max = (p1,p2) => p1 > p2 ? p1:p2; 

을 구현하려는 및 COND 내가 하나가 참/거짓 얻을 수 있지만 LeftEx 또는 조건이 반환해야 RightEx으로

ParameterExpression LeftEx = Expression.Parameter(typeof(int), "p1"); 
ParameterExpression RightEx = Expression.Parameter(typeof(int), "p2"); 
BinaryExpression GroesserAls = Expression.GreaterThan(LeftEx, RightEx); 
ConditionalExpression Cond = BinaryExpression.Condition(GroesserAls, LeftEx, RightEx); 
Expression main = Cond.Test; 
Expression<Func<int, int, bool>> Lam = Expression.Lambda<Func<int, int, bool>>(main, 
    new ParameterExpression[] { LeftEx, RightEx }); 
Console.WriteLine(Lam.Compile().Invoke(333, 1200)); 

시도 .

설명서에서 아무것도 찾을 수 없습니다.

피터

+0

잊지 마세요 , 당신은 항상 반사경 ILDASM을 사용할 수 있습니다

Expression<Func<int, int, int>> Lam = Expression.Lambda<Func<int, int, int>>(Cond, // <=== HERE new ParameterExpression[] { LeftEx, RightEx }); 

편집 - - BTW var 여기에 당신의 친구입니다 컴파일러에서 생성 한 표현식 트리 코드를 확인하십시오. –

답변

8

난 그냥 필요가 있다고 생각 :

이 가 가
var p1 = Expression.Parameter(typeof(int), "p1"); 
    var p2 = Expression.Parameter(typeof(int), "p2"); 
    var body = Expression.Condition(Expression.GreaterThan(p1, p2), p1, p2); 
    var lambda = Expression.Lambda<Func<int, int, int>>(body, p1, p2); 
    var func = lambda.Compile(); 
    Console.WriteLine(func(333,1200)); 
    Console.WriteLine(func(1200,333)); 
+0

Func 반환 형식이 int 여야한다고 생각합니다 (Func ) –

+0

(고정, 건배) –

관련 문제