break 會強迫程式離開 for、while 或 do-while 循環。在 IL 中,這表現為無條件分支 br.s 跳轉到循環結束後的標籤(如 IL_0019 的 ret)。
以下 C# 程式在 i == 2 時執行 break,故僅輸出 1:
// C# 代碼
public class zzz {
public static void Main() {
int i;
for (i = 1; i <= 10; i++) {
if (i == 2)
break;
System.Console.WriteLine(i);
}
}
}
對應 IL 關鍵片段:
ldc.i4.1 / stloc.0:初始化 i=1。br.s IL_0014:跳到條件檢查處。IL_0004:循環體起始,載入 i 與 2 比較(bne.un.s)。i==2),br.s IL_0019 直接跳到 ret 退出循環。i,執行 i++,回到 IL_0014 檢查 i <= 10。.method public hidebysig static void vijay() il managed {
.entrypoint
.locals (int32 V_0)
ldc.i4.1
stloc.0
br.s IL_0014
IL_0004: ldloc.0
ldc.i4.2
bne.un.s IL_000a
br.s IL_0019 // break 跳出
IL_000a: ldloc.0
call void [mscorlib]System.Console::WriteLine(int32)
ldloc.0
ldc.i4.1
add
stloc.0
IL_0014: ldloc.0
ldc.i4.s 10
ble.s IL_0004
IL_0019: ret
}
輸出:1。
同樣的循環若改用 continue,IL 會在條件成立時跳轉到循環尾部的遞增標籤(IL_0010),而非跳出循環。這印證了 break 與 continue 在 IL 層級只是跳轉目標不同。