由于是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. Effective C++: 05实现

    26:尽可能延后变量定义式的出现时间 1:只要你定义了一个变量而其类型带有一个构造函数或析构函数,那么当程序的控制流到达这个变量定义式时,你便得承受构造成本:当这个变量离开其作用域时,你便得承受析构成 ...

  2. 洛谷 1463[SDOI2005] 反素数ant

    题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6 ...

  3. Uva 10074【递推dp】

    UVa 10074 题意:求01矩阵的最大子0矩阵. http://www.csie.ntnu.edu.tw/~u91029/MaximumSubarray.html#2 这里说的很清楚.先求Larg ...

  4. ADT上跑java application

    Invalid layout of java.lang.String at value## A fatal error has been detected by the Java Runtime En ...

  5. oralce GROUPING SETS

    select id,area,stu_type,sum(score) score from students group by grouping sets((id,area,stu_type),(id ...

  6. js+canvas五子棋人机大战ai算法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. Java8 Date与LocalDate互转

    Java8 日期时间API,新增了LocalDate.LocalDateTime.LocalTime等线程安全类,接下来要说的是LocalDate与java.util.Date之间的转换. 1.Loc ...

  8. 2019-7-1-VisualStudio-快速设置启动项目

    title author date CreateTime categories VisualStudio 快速设置启动项目 lindexi 2019-07-01 14:37:38 +0800 2019 ...

  9. Hbase数据模型 时间戳

  10. Error While Loading Shared Libraries, Cannot Open Shared Object File

    In the "I wish the Internet had an actual correct answer" category comes a question from a ...