protected override Expression VisitBinary(BinaryExpression expression)
            {
                if (expression.Operator == op) {
                    list = expression.Left.BreakByOperator(list, op);
                    list = expression.Right.BreakByOperator(list, op);
                } else {
                    list.Add(expression);
                }

                return expression;
            }
 protected override Expression VisitBinary(BinaryExpression expression)
 {
     returnType = expression.Operator.ReturnType();
     return expression;
 }
        protected virtual Expression VisitBinary(BinaryExpression expression)
        {
            Expression left = Visit(expression.Left);
            Expression right = Visit(expression.Right);

            if (left != expression.Left || right != expression.Right)
                return Expression.Binary(left, expression.ExpressionType, right);

            return expression;
        }