private Expression Build(IcaseFunctionNode node) { Expression ifFalseExpr = Expression.Convert(InnerBuild(node.ElseResultNode), typeof(object)); Expression conditionExpr = null; foreach (var caseConditionNode in node.CaseConditionNodes.Reverse()) { var conditionNode = InnerBuild(caseConditionNode.ConditionNode); if (conditionNode.NodeType == ExpressionType.Constant && ((ConstantExpression)conditionNode).Value == null) { return(Expression.Constant(null)); } var testExpr = Expression.Convert(conditionNode, typeof(bool)); var ifTrueExpr = Expression.Convert(InnerBuild(caseConditionNode.ResultNode), typeof(object)); conditionExpr = Expression.Condition(testExpr, ifTrueExpr, ifFalseExpr, typeof(object)); ifFalseExpr = conditionExpr; } return(conditionExpr); }
//TODO: implement with CSharpExpressionHelperMethodResolver in order to get auto type conversion private Type Build(IcaseFunctionNode node) { // just picked one argument. I'm assuming the others are going to be the same. return(InnerBuild(node.CaseConditionNodes.First().ResultNode)); }