关于异常try finally没有catch 的问题

honglik95 2014-06-04 04:35:53
下面的方法执行时会报错,不会执行到finally方法,可是finally不是总是会执行吗?不懂
public static int GetValueI()
{
int i = 0;
try
{
i = 4 / i;
return i;
}
finally
{
i = 2;
Console.WriteLine("i={0}", i);
}
}
...全文
821 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
rayyu1989 2014-06-05
  • 打赏
  • 举报
回复
因为vs给你命中报错的地方了 程序已暂停 所以还没执行到finally 而不是不执行
跳舞的码农 2014-06-05
  • 打赏
  • 举报
回复
finally是执行的 只不过是报错卡在那个地方了
lyx266 2014-06-05
  • 打赏
  • 举报
回复
lz 你的问题不是finally不执行而是你启动的方式不对 你只是f5 调试模式运行程序 那么程序会停在抛出异常的地方. 你想看是否会执行finally 就用ctrl+f5 来运行程序,或者将程序编译后去执行生成后的可执行程序 以前我也有过和你一样的疑问
  • 打赏
  • 举报
回复
你是在调试的情况下, “调试”选项里面有个“异常”里的用户未处理的勾在,就直接停那
欢乐的小猪 2014-06-05
  • 打赏
  • 举报
回复
引用 3 楼 hbu_pig 的回复:
i = 4 / i; return i; 因为try的时候return了
错了。 估计是try里有异常,所以走不下去了。。
风吹腚腚凉 2014-06-05
  • 打赏
  • 举报
回复
引用 13 楼 zgd77521 的回复:
finally里面的方法肯定会执行的,在执行完i = 4 / i;这行代码之后就直接走finally里面的方法了,而且不会再执行try里面的代码。
并不是在所有的情况下都会执行例如强制结束进程
风吹腚腚凉 2014-06-05
  • 打赏
  • 举报
回复
引用 21 楼 wangjun8868 的回复:
除以0报错,是就不会往下执行了
怎么可能不往下执行了?
ojekleen 2014-06-05
  • 打赏
  • 举报
回复
引用 16 楼 wg5945 的回复:
说的很清楚了,你想看finally里面执行结果的话,请按ctrl+f5
+1
编程有钱人了 2014-06-05
  • 打赏
  • 举报
回复
除以0报错,是就不会往下执行了
小恒丶 2014-06-05
  • 打赏
  • 举报
回复
你I=0的时候是不可能执行下面的
小恒丶 2014-06-05
  • 打赏
  • 举报
回复
直接报错 的。你没carch 会停止下面的
风吹腚腚凉 2014-06-05
  • 打赏
  • 举报
回复
引用 3 楼 hbu_pig 的回复:
i = 4 / i; return i; 因为try的时候return了
return也会执行的。
E次奥 2014-06-05
  • 打赏
  • 举报
回复
因为报错了,所以没有执行到,不是不执行; 加上catch后,会把错误从catch块输出,然后就有finally了
小灰狼 2014-06-05
  • 打赏
  • 举报
回复
如果异常没有被捕捉,可能导致你的程序直接崩溃,finally 就不会被执行了 如果是 web 应用程序,IIS会终止正在执行的线程,也不会被执行了 异常一定要被处理,要么自己捕捉处理,要么被你的调用者捕捉并处理,要么再被调用者的调用者捕捉并处理……总之异常一定要被捕捉处理,否则玩完 So, try this:

try{
    GetValueI();
}catch{
  
}
水目 2014-06-05
  • 打赏
  • 举报
回复
國木國木糯 2014-06-04
  • 打赏
  • 举报
回复
从启动程序到出错的函数的整个调用过程(堆栈)都没有catch应该是不执行的吧
wg5945 2014-06-04
  • 打赏
  • 举报
回复
说的很清楚了,你想看finally里面执行结果的话,请按ctrl+f5
wg5945 2014-06-04
  • 打赏
  • 举报
回复
superliu1122 2014-06-04
  • 打赏
  • 举报
回复
引用 10 楼 kingkonglik 的回复:
为什么我的没有执行finally中的代码?不解
如何确定没有执行的?
zgd77521 2014-06-04
  • 打赏
  • 举报
回复
finally里面的方法肯定会执行的,在执行完i = 4 / i;这行代码之后就直接走finally里面的方法了,而且不会再执行try里面的代码。
加载更多回复(12)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧