public abstract void Visit(BinaryExpresssion expression);
public override void Visit(BinaryExpresssion expression) { // Evaluates the left expression and saves the value expression.LeftExpression.Accept(this); object left = result; // Evaluates the right expression and saves the value expression.RightExpression.Accept(this); object right = result; switch (expression.Type) { case BinaryExpressionType.And: result = Convert.ToBoolean(left) && Convert.ToBoolean(right); break; case BinaryExpressionType.Or: result = Convert.ToBoolean(left) || Convert.ToBoolean(right); break; case BinaryExpressionType.Div: result = Convert.ToDecimal(left) / Convert.ToDecimal(right); break; case BinaryExpressionType.Equal: // Use the type of the left operand to make the comparison result = Comparer.Default.Compare(left, Convert.ChangeType(right, left.GetType())) == 0; break; case BinaryExpressionType.Greater: // Use the type of the left operand to make the comparison result = Comparer.Default.Compare(left, Convert.ChangeType(right, left.GetType())) > 0; break; case BinaryExpressionType.GreaterOrEqual: // Use the type of the left operand to make the comparison result = Comparer.Default.Compare(left, Convert.ChangeType(right, left.GetType())) >= 0; break; case BinaryExpressionType.Lesser: // Use the type of the left operand to make the comparison result = Comparer.Default.Compare(left, Convert.ChangeType(right, left.GetType())) < 0; break; case BinaryExpressionType.LesserOrEqual: // Use the type of the left operand to make the comparison result = Comparer.Default.Compare(left, Convert.ChangeType(right, left.GetType())) <= 0; break; case BinaryExpressionType.Minus: result = Convert.ToDecimal(left) - Convert.ToDecimal(right); break; case BinaryExpressionType.Modulo: result = Convert.ToDecimal(left) % Convert.ToDecimal(right); break; case BinaryExpressionType.NotEqual: // Use the type of the left operand to make the comparison result = Comparer.Default.Compare(left, Convert.ChangeType(right, left.GetType())) != 0; break; case BinaryExpressionType.Plus: result = Convert.ToDecimal(left) + Convert.ToDecimal(right); break; case BinaryExpressionType.Times: result = Convert.ToDecimal(left) * Convert.ToDecimal(right); break; case BinaryExpressionType.Pow: result = Math.Pow(Convert.ToDouble(left), Convert.ToDouble(right)); break; } }