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()方法

原文地址:https://www.cnblogs.com/tkt2016/p/8807668.html