问一个关于try
{}
catch
{}
finally
{}
的问题, 如果 try中有return,那么finally里的语句是否会执行?
{}
catch
{}
finally
{}
的问题, 如果 try中有return,那么finally里的语句是否会执行?
解决方案 »
- excel.workbook saveas localhost 可以生成为什么换成其他网址就生成不了?
- 关于c/s和soa架构
- sqlserver在插入数据时系统内存不断增加
- 纠结的cookies读取问题。帮忙看看!
- 小弟欲对C#展开研究,高手赐基本经典教材!
- 如何在C#的文本框(winform)中实现自动滚屏的功能!!!!!!!!! (请大师赐教) ### 跪求 **** 在线等
- 报表控件
- 怎么获得当前笔的坐标 (非鼠标位置坐标)
- c#能不能写com组件
- C#作的WinForm程序,Oracle数据库,如何能够不用客户端安装Oracle Client
- C# windowsForm中的textBox
- 生成字母数字不重复的4位或者6位验证码
try {
return SomeNumber();
} finally {
Foo();
}
}被编译为
.method private hidebysig static int32 Test() cil managed
{
.maxstack 1
.locals init (
[0] int32 CS$1$0000)
L_0000: call int32 Program::SomeNumber()
L_0005: stloc.0
L_0006: leave.s L_000e
L_0008: call void Program::Foo()
L_000d: endfinally
L_000e: ldloc.0
L_000f: ret
.try L_0000 to L_0008 finally handler L_0008 to L_000e
}
其实你可以看出,在IL层面,事实上,它只是把返回值送到运算栈的顶端,而ret是在finally之后的。
{
//try必须执行,但可能报错,报错就中断跳到catch中
}
catch
{
//如果try块中代码报错就执行
}
finally
{
//无论如何都要执行,没有任何形式可以中断。
}