【发布时间】:2017-11-20 22:14:42
【问题描述】:
对于 CIL 中的 try 块,我知道您可以通过在受保护的块中抛出异常来输入 catch 处理程序,例如:
try {
newobj Exception
throw
leave EX1
} catch {
pop
ldstr "catchblock"
call WriteLine
} finally {
ldstr "finallyblock"
call WriteLine
}
EX1:
throw 语句将控制转移到 catch 子句,它 弹出异常。
我的担忧(/好奇)是这是否可以优化以便执行 不是通过投掷,而是通过增加PC“落入”它来捕获块。像这样的:
try {
newobj Exception
} catch {
pop
ldstr "catchblock"
call WriteLine
} finally {
ldstr "finallyblock"
call WriteLine
}
EX1:
这是有效的 CIL 吗?是否可以在不使用 throw 语句的情况下到达 catch 处理程序块?
【问题讨论】: