static int EvaluateExpression(Expression ex) { if (ex is BinaryExpression) { BinaryExpression bEx = (BinaryExpression) ex; if (ex is DivideExpression) { return checked(EvaluateExpression(bEx.Op0) / EvaluateExpression(bEx.Op1)); } else if (ex is MinusExpression) { return checked(EvaluateExpression(bEx.Op0) - EvaluateExpression(bEx.Op1)); } else if (ex is MultiplyExpression) { return checked(EvaluateExpression(bEx.Op0) * EvaluateExpression(bEx.Op1)); } else if (ex is PlusExpression) { return checked(EvaluateExpression(bEx.Op0) + EvaluateExpression(bEx.Op1)); } else { throw new NotSupportedException(); } } else if (ex is ConstantExpression) { return ((ConstantExpression) ex).Value; } else { UnaryMinusExpression uEx = (UnaryMinusExpression) ex; return -EvaluateExpression(uEx.Op); } }