MSIL实用指南-生成foreach语句
foreach可以迭代数组或者一个集合对象。
foreach语句格式是
它的生成步骤是
foreach (<成员> in <集合>)
	<循环体>
一、声明三个变量,
local0调用get_Current结果,
local1保存集合对象的调用GetEnumerator结果,
local2调用MoveNext结果。
二、声明四个标签,分别是循环开始标签、finally结束标签、MoveNext标签、get_Current标签
三、调用集合对象的GetEnumerator方法,保存结果到相应变量
四、开始try
五、生成跳转到MoveNext标签指令
六、生成循环体
七、加载local1,调用集合MoveNext方法,并保存结果到local2
八、加载local2,生成brtrue_S,如果不为null跳转到循环开始标签
九、开始finally,判断local1是否为空,不为空则调用System.IDisposable::Dispose()方法
MSIL实用指南-生成foreach语句的更多相关文章
- MSIL实用指南-生成while语句
		
本篇讲解怎样生成while语句.while语句是编程语言中很重要的循环语句,它的结构是while(<表达式>) <语句或语句块> 当表达式的结果为true时就一直执行语句或语句 ...
 - MSIL实用指南-生成for语句
		
for语句格式是这样的for(<初始化语句>;<条件语句>;<自增减语句>) <循环体> 它可以转换为while语句 if(<条件语句>){ ...
 - MSIL实用指南-生成索引器
		
MSIL实用指南-生成索引器 索引器是一种特殊的属性,它有参数的,也有get和set方法,属性名称一般是"Item",并且方法名称一般名称是"get_Item" ...
 - MSIL实用指南-生成if...else...语句
		
if...else...语句是非常重要的选择语句,它的生成一般需要ILGenerator的DefineLabel方法和MarkLabel方法,以及Brtrue_S和Br_S指令. 一.DefineLa ...
 - MSIL实用指南-生成异常处理
		
本篇讲解怎么生成异常.C# 异常处理时建立在四个关键词之上的:try.catch.finally 和 throw. 一.异常的抛出抛出异常在C#语言中要使用throw关键字,使用方法是throw &l ...
 - MSIL实用指南-生成属性
		
本篇讲解怎么生成属性,包括get和set方法. 第一步,生成一个字段生成字段用TypeBuilder.DefineField方法.实例代码: FieldBuilder customerNameBldr ...
 - MSIL实用指南-生成构造函数
		
本篇讲解生成构造函数的一些知识,包括创建实例构造函数.静态构造函数.调用父类构造函数. 生成构造函数的方法生成构造函数的方法是TypeBuilder.DefineConstructor(MethodA ...
 - MSIL实用指南-生成接口
		
本篇讲解怎么样生成接口,即interface. 一.创建类型创建一个接口类型依旧用ModuleBuilder的DefineType方法,但是它的第二个参数必须要有TypeAttributes.Inte ...
 - MSIL实用指南-生成内部类
		
生成内部类用TypeBuilder的DefineNestedType方法,得到另一个TypeBuilder.内部类的可访问性都是TypeAttributes的“Nested”开头一些成员.实例代码:y ...
 
随机推荐
- JAVA面试题 String s = new String("xyz");产生了几个对象?
			
面试官Q1:请问String s = new String("xyz");产生了几个对象? 对于这个Java面试题,老套路先上代码: public class StringTest ...
 - UPC Contest RankList – 2019年第二阶段我要变强个人训练赛第十四场
			
A.JOIOJI •传送门 [1]:BZOJ [2]:洛谷 •思路 在一个区间(L,R]内,JOI的个数是相等的,也就是R[J]-L[J]=R[O]-L[O]=R[I]-L[I], 利用前缀和的思想, ...
 - js里的window对象
			
alert(<msg>) 向用户显示对话框窗口并等候其被关闭 blur() 让窗口失去键盘焦 ...
 - 【iOS】copy 关键字
			
以前没注意过 iOS 的 copy, nonatomic, assign, weak, strong 等关键字. 偏偏今天遇到了一个问题,恰恰是关键字的问题,如图: 之前用的是 assign, 没有用 ...
 - 【iOS】duplicate symbols for architecture x86_64
			
今天遇到了这个问题,错误如下: duplicate symbol _OBJC_IVAR_$_BCViewController.bank in: /Users/***/Library/Developer ...
 - 整理github总结
			
之前记述过两篇关于git命令的随笔,那时候对git的理解还不太深(虽然现在理解的也不是很多...菜哭了),只会用那些命令,并没有形成自己的知识,今天下载完Git之后,规整了一下自己的github,在吃 ...
 - 【转载】C/C++中long long与__int64的区别
			
在C99标准(详情请猛击:C语言的发展及其版本)中,增加了对64位长整型数据的支持,它的类型就是 long long,占用8个字节. 由于C99标准发布较晚,一些较老的C/C++编译器不支持,新编译器 ...
 - [NUnit]No results
			
Results (nunit3) saved as TestResult.xmlCommitting...No results, this could be for a number of reaso ...
 - 0x33 同余
			
目录 定义 同余类与剩余系 费马小定理 欧拉定理 证明: 欧拉定理的推论 证明: 应用: 定义 若整数 $a$ 和整数 $b$ 除以正整数 $m$ 的余数相等,则称 $a,b$ 模 $m$ 同余,记为 ...
 - 使用excel计算骰子输赢概率
			
如何得到使用3个骰子掷赢4个骰子的概率(每个骰子的点数为1-6,点数一样算输) 分为3步解决: 第一步.计算n个骰子得到m点数的分布 1个骰子能得到1.2.3.4.5.6点数,每个点数出现的方式只有1 ...