由于是CodeDom些列,所以先介绍几个CodeDom表达式:

 :CodeConditionStatement:判断语句即是if(condition){} else{},看最全的那个构造函数:

 public CodeConditionStatement(
CodeExpression condition,//条件
CodeStatement[] trueStatements,//为true的语句体
CodeStatement[] falseStatements//为false语句体
)
:CodeIterationStatement():表示 for 语句或语句块内的循环(使用测试表达式作为继续循环的条件):
在codedom中没有提高while和dowhile但是For已经够用的
public CodeIterationStatement(
CodeStatement initStatement,//for初始化
CodeExpression testExpression,//条件表达式
CodeStatement incrementStatement,//for变化体,增或减
CodeStatement[] statements//循环体
)
:CodeBinaryOperatorExpression:表示一个表达式,该表达式包含在两个表达式间进行的二进制运算,
public CodeBinaryOperatorExpression(
CodeExpression left,//表达式左边
CodeBinaryOperatorType op,//操作符
CodeExpression right//表达式右边
)
:CodeArrayIndexerExpression:表示对数组的索引的引用:
public CodeArrayIndexerExpression(
CodeExpression targetObject,//数组对象
CodeExpression[] indices//下标
)
其他参见CodeDOM 快速参考:msdn.microsoft.com/zh-cn/library/f1dfsbhc(VS.).aspx
code:
public CodeNamespace CreateNameSpace()
{
public CodeNamespace CreateNameSpace()
{
//Test
CodeMemberMethod test = new CodeMemberMethod();
test.Name = "Test";
test.Attributes = MemberAttributes.Public | MemberAttributes.Final;
test.Statements.Add(new CodeVariableDeclarationStatement(typeof(char[]), "ch",
new CodeMethodInvokeExpression(new CodePrimitiveExpression("+ - + - + + - -"), "ToCharArray",
new CodeExpression[] { })));
test.Statements.Add(new CodeMethodInvokeExpression(new CodeMethodReferenceExpression
(new CodeThisReferenceExpression(), "FuHaoSanJiao"), new CodeExpression[] { new CodeVariableReferenceExpression("ch"),
new CodePrimitiveExpression() }));
test.Statements.Add(new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("System.Console"), "Read"));
//FuHaoSanJiao
CodeMemberMethod fuHaoSanJiao = new CodeMemberMethod();
fuHaoSanJiao.Name = "FuHaoSanJiao";
fuHaoSanJiao.Parameters.Add(new CodeParameterDeclarationExpression(new CodeTypeReference(typeof(char[])),
"ch"));
fuHaoSanJiao.Parameters.Add(new CodeParameterDeclarationExpression(new CodeTypeReference(typeof(int)), "start"));
fuHaoSanJiao.Statements.Add(new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("System.Console"),
"WriteLine", new CodeExpression[] { new CodeObjectCreateExpression(typeof(string), new CodeArgumentReferenceExpression("ch")) }));
fuHaoSanJiao.Statements.Add(new CodeConditionStatement(new CodeBinaryOperatorExpression(
new CodeArgumentReferenceExpression("start"), CodeBinaryOperatorType.GreaterThanOrEqual,
(new CodeBinaryOperatorExpression(new CodePropertyReferenceExpression(
new CodeArgumentReferenceExpression("ch"), "Length"),
CodeBinaryOperatorType.Divide, new CodePrimitiveExpression()))),
new CodeMethodReturnStatement()));
CodeBinaryOperatorExpression condition = new CodeBinaryOperatorExpression(
new CodeVariableReferenceExpression("i"),
CodeBinaryOperatorType.LessThan,
new CodeBinaryOperatorExpression(new CodeBinaryOperatorExpression(new CodePropertyReferenceExpression(new CodeArgumentReferenceExpression("ch"), "Length"),
CodeBinaryOperatorType.Subtract, new CodeArgumentReferenceExpression("start")), CodeBinaryOperatorType.Subtract,
new CodePrimitiveExpression()));//for 条件
CodeConditionStatement iterationBody = new CodeConditionStatement(new CodeBinaryOperatorExpression(
new CodeArrayIndexerExpression(new CodeArgumentReferenceExpression("ch"),
new CodeVariableReferenceExpression("i")),
CodeBinaryOperatorType.IdentityEquality, new CodeArrayIndexerExpression(
new CodeArgumentReferenceExpression("ch"),
new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("i"),
CodeBinaryOperatorType.Add, new CodePrimitiveExpression()))),
new CodeAssignStatement(
new CodeArrayIndexerExpression(new CodeArgumentReferenceExpression("ch"),
new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("i"), CodeBinaryOperatorType.Add,
new CodePrimitiveExpression())),
new CodePrimitiveExpression('+')));
iterationBody.FalseStatements.Add(new CodeAssignStatement(
new CodeArrayIndexerExpression(new CodeArgumentReferenceExpression("ch"),
new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("i"), CodeBinaryOperatorType.Add,
new CodePrimitiveExpression())),
new CodePrimitiveExpression('-')));
CodeAssignStatement iteerationbody2 = new CodeAssignStatement(new CodeArrayIndexerExpression(
new CodeArgumentReferenceExpression("ch"), new CodeVariableReferenceExpression("i")),
new CodePrimitiveExpression(' '));
fuHaoSanJiao.Statements.Add(new CodeIterationStatement(new CodeVariableDeclarationStatement(typeof(int),
"i", new CodeArgumentReferenceExpression("start")), condition,
new CodeAssignStatement(new CodeVariableReferenceExpression("i"), new CodeBinaryOperatorExpression(
new CodeVariableReferenceExpression("i"), CodeBinaryOperatorType.Add,
new CodePrimitiveExpression())), new CodeStatement[] { iterationBody, iteerationbody2 }));
// ch[ch.Length - start - 1] = ' ';
fuHaoSanJiao.Statements.Add(new CodeAssignStatement(
new CodeArrayIndexerExpression(new CodeArgumentReferenceExpression("ch"),
new CodeBinaryOperatorExpression(new CodeBinaryOperatorExpression(
new CodePropertyReferenceExpression(new CodeArgumentReferenceExpression("ch"), "Length"),
CodeBinaryOperatorType.Subtract, new CodeArgumentReferenceExpression("start")),
CodeBinaryOperatorType.Subtract,
new CodePrimitiveExpression())), new CodePrimitiveExpression(' ')));
// FuHaoSanJiao(ch, start + 1);
fuHaoSanJiao.Statements.Add(new CodeMethodInvokeExpression(new CodeThisReferenceExpression(),
"FuHaoSanJiao", new CodeArgumentReferenceExpression("ch"),
new CodeBinaryOperatorExpression(new CodeArgumentReferenceExpression("start"),
CodeBinaryOperatorType.Add, new CodePrimitiveExpression())));
CodeTypeDeclaration codeDomDemo2 = new CodeTypeDeclaration("CodeDomDemo2");
codeDomDemo2.Members.Add(test);
codeDomDemo2.Members.Add(fuHaoSanJiao);
codeDomDemo2.Attributes = MemberAttributes.Public;
codeDomDemo2.Comments.Add(new CodeCommentStatement("this code is from CodeDom!"));
//codeDomDemo2.Members.AddRange();
CodeNamespace nspace = new CodeNamespace("CodeDomDemo2");
nspace.Imports.Add(new CodeNamespaceImport("System"));
nspace.Types.Add(codeDomDemo2);
return nspace;
}
}
}
输出代码为 : namespace CodeDomDemo2
{
using System;
// this code is from CodeDom!
public class CodeDomDemo2
{
public void Test()
{
char[] ch = "+ - + - + + - -".ToCharArray();
this.FuHaoSanJiao(ch, );
System.Console.Read();
}
private void FuHaoSanJiao(char[] ch, int start)
{
System.Console.WriteLine(new string(ch));
if ((start
>= (ch.Length / )))
{
return;
}
for (int i = start; (i
< ((ch.Length - start)
- )); i = (i + ))
{
if ((ch[i] == ch[(i + )]))
{
ch[(i + )] = '+';
}
else
{
ch[(i + )] = '-';
}
ch[i] = ' ';
}
ch[((ch.Length - start)
- )] = ' ';
this.FuHaoSanJiao(ch, (start + ));
}
}
}

CodeTypeDeclaration,CodeMemberProperty动态生成代码的更多相关文章

  1. Emit动态生成代码

    Emit动态生成代码 引用:秒懂C#通过Emit动态生成代码 首先需要声明一个程序集名称, // specify a new assembly name var assemblyName = new ...

  2. 秒懂C#通过Emit动态生成代码 C#使用Emit构造拦截器动态代理类

    秒懂C#通过Emit动态生成代码   首先需要声明一个程序集名称, 1 // specify a new assembly name 2 var assemblyName = new Assembly ...

  3. 秒懂C#通过Emit动态生成代码

    首先需要声明一个程序集名称, 1 // specify a new assembly name 2 var assemblyName = new AssemblyName("Kitty&qu ...

  4. Android 动态生成布局 (多层嵌套)

    Android 除了能够载入xml文件,显示布局外,也能够代码生成布局,并通过setContentView(View view)方法显示布局.单独的一层布局,如一个主布局加一个控件(如Button\i ...

  5. 动态生成一个设定好特殊样式的Tlabel,快速生成代码

    动态生成一个设定好特殊样式的Tlabel,快速生成代码: 1.自己先在可视化界面设定一个Label,像这样: 2.选择label,快捷键ctrl+C 复制,粘贴带代码编辑器去,会生成一段这样的窗体代码 ...

  6. 在后台代码中动态生成pivot项并设置EventTrigger和Action的绑定

    最近在做今日头条WP的过程中,遇到需要动态生成Pivot项的问题.第一个版本是把几个频道写死在xaml里了,事件绑定也写在xaml里,每个频道绑定一个ObservableCollection<A ...

  7. 用js动态生成css代码

    有时候我们需要利用js来动态生成页面上style标签中的css代码,方法很直接,就是直接创建一个style元素,然后设置style元素里面的css代码,最后把它插入到head元素中.但有些兼容性问题我 ...

  8. winform WebBrowser控件中,cs后台代码执行动态生成的js

    很多文章都是好介绍C# 后台cs和js如何交互,cs调用js方法(js方法必须是页面上存在的,已经定义好的),js调用cs方法, 但如果想用cs里面执行动态生成的js代码,如何实现呢? 思路大致是这样 ...

  9. Java下的框架编程(反射,泛型,元数据,CGLib,代码动态生成,AOP,动态语言嵌入)

    Java 虽然没有动态语言般暴起,但仍然天连天,水接水的生出好多框架技术---反射(reflection),泛型(generics),元数据(annotation),proxies(proxy/cgl ...

随机推荐

  1. 在 Deepin 15.9 安装 KiCad EDA 5.1 (2019-05-30)

    在 Deepin 15.9 安装 KiCad EDA 5.1 Deepin (深度系统)是世界著名的 Linux 发行版. KiCad EDA 是世界最强大的开源 PCB 绘制软件. 尝试一:在深度商 ...

  2. @codeforces - 1209H@ Moving Walkways

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 机场中常常见到滑行道:假如一个滑行道的运行速度为 s,你的行走速 ...

  3. 修改UISearchBar背景

    转载:http://blog.csdn.net/favormm/archive/2010/11/30/6045463.aspx UISearchBar是由两个subView组成的,一个是UISearc ...

  4. Websocket 群聊功能

    websocket 群聊 前提关闭防火墙 写入代码 from flask import Flask,request,render_template from geventwebsocket.handl ...

  5. 梯度优化算法Adam

    最近读一个代码发现用了一个梯度更新方法, 刚开始还以为是什么奇奇怪怪的梯度下降法, 最后分析一下是用一阶梯度及其二次幂做的梯度更新.网上搜了一下, 果然就是称为Adam的梯度更新算法, 全称是:自适应 ...

  6. 解决ubuntu的Idea启动No JDK found. Please validate either IDEA_JDK, JDK_HOME or JAVA_HOME environment variable points to valid JDK installation.

    直接在idea安装目录下运行idea.sh可以正常启动,但是使用ubuntu的dash搜索出来的idea报错,No JDK found. Please validate either IDEA_JDK ...

  7. H3C 局域网的不足

  8. Laravel5.5 支付宝手机网站支付的教程

    https://segmentfault.com/a/1190000015559571 这篇文章主要介绍了Laravel5.5 支付宝手机网站支付的教程,小编觉得挺不错的,现在分享给大家,也给大家做个 ...

  9. PHP中 spl_autoload_register() 函数用法

    这篇文章主要介绍了PHP中spl_autoload_register()函数用法,结合实例形式分析了__autoload函数及spl_autoload_register函数的相关使用技巧,需要的朋友可 ...

  10. Vue打包后放到服务器出现Loading chunk {n} failed 错误

    导航栏点击切换时 会出现Loading chunk {n} failed  ,刷新之后便不会出现.而且n在最新的build的文件中,n没有存在 偶然一次发现,项目更新迭代开发时上传测试环境后就会出现, ...