【.net 深呼吸】细说CodeDom(8):分支与循环
- 作者: 五速梦信息网
- 时间: 2026年04月04日 13:56
有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类。要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的。如果用.net的“反编译”工具的朋友会知道,你用while语句写了一段代码,然后编译生成程序集,再用工具把代码“反”出来,此时你会发现,你原来写的是while语句,但出来的是for语句,道理是一样的,“反编译”工具只关心代码的执行逻辑,而不是语法。所以,你自然无法用 CodeDom 来生成var关键字来声明变量,也无法生成用 Lambda 表达式表示的方法,也不能生成仅有get和set的属性定义语法。
因此,大家不要把语法和逻辑搞混。
先来介绍一下分支,分支语句类似 if 语句,由 CodeConditionStatement 类表示,它需要三个要素:
1、条件,用于判断给定的表达式是否为true。
2、当条件成立时所执行的代码。
3、当条件不成立时所执行的代码。
下面举个例子,让某数除以2,并取模(即取余),如果结果为0,即为偶数,否则为奇数。代码如下。
生成的代码如下:

有时候,代码只需要判断条件成立并进行处理,而忽略条件不成立的情形,这时候 FalseStatements 中可以不添加任何语句。如下面例子。
这个例子生成代码为:声明一个字符串类型变量,并初始化。然后判断其长度,并按条件执行输出。生成的代码如下。

===========================================
循环语句的生成也不难,它由 CodeIterationStatement 类负责生成,其结构类似于 for 语句,由个要素组成:
1、循环条件的初始值。
2、判断是否执行循环的条件。
3、对循环条件的更改。
下面通过示例,生成一个标准的for循环。
初始化一个变量i,条件是它小于9时发生循环,每次循环后会把条件加上2。
这时候会发现,生成的 VB 代码是While循环。

而生成的C#代码则是for循环。

你甭管它是什么语法格式,只要逻辑上对了就行,这是生成代码,不是写代码,不要患有强迫症。
想不想来个死循环,其实,死循环只要让 TestExpression 永远为true,并且, IncrementStatement 不会更改条件的值就行了。比如这样。
初始化变量为true,并每一轮循环后都让它为true。生成代码如下:

其实,还可以更简单一点。
老周在前面介绍过,CodeSnippetStatement 类可以用原义文本生成代码,这里我们把原义文本用空字符表示,就会生成空白语句。
所以,生成的C#代码是这样的:

生成的 VB 代码是这样的:

生成的C++代码是这样的:

好了,有关分支和循环的逻辑代码的生成就介绍到此了,下一篇文章,咱们就开始说说编译代码的事。
相关文章
-
【4Opencv】如何识别出轮廓准确的长和宽
【4Opencv】如何识别出轮廓准确的长和宽
- 互联网
- 2026年04月04日
-
【a202】&&【9208】输油管道问题
【a202】&&【9208】输油管道问题
- 互联网
- 2026年04月04日
-
【adb真机查Log】Android Studio 3.X 找不到Android Device Monitor
【adb真机查Log】Android Studio 3.X 找不到Android Device Monitor
- 互联网
- 2026年04月04日
-
【.net 深呼吸】细说CodeDom(6):方法参数
【.net 深呼吸】细说CodeDom(6):方法参数
- 互联网
- 2026年04月04日
-
【.net 深呼吸】设置序列化中的最大数据量
【.net 深呼吸】设置序列化中的最大数据量
- 互联网
- 2026年04月04日
-
【.net 深呼吸】将目录树转化为文本
【.net 深呼吸】将目录树转化为文本
- 互联网
- 2026年04月04日






