异常问题
static void Main(string[] args)
{
Console.WriteLine(Method());
}
static string Method()
{
string str = "1";
try
{
int i = 0;
if (5 / i == 0)
{
str += "2";
}
}
catch
{
str += "3";
return str;
}
finally
{
str += "4";
}
return str;
}
运行程序返回结果怎么不是134呢,谢谢!
------解决方案--------------------catch中去掉return
------解决方案--------------------虽然你在finally里面为str加了一个"4"字符,但是由于在catch已经调用了return str,return的作用并非是简单的返回,它会将返回值放到堆栈中,并且执行了其他的恢复性操作后,再返回到调用者。
在return处将str放入堆栈中,虽然在finally里面操作了str,但是string类型的变量都是值传递的,并非代表一个引用,所以你在finally里面对str作的操作不会影响已经在堆栈中的返回值。
你可以写一个类,将str放入该类中,Method中直接操作该类的str属性,Method的返回值也是该类的实例,这样作之后,你的返回值就"134".
------解决方案--------------------
------解决方案--------------------三楼说的很明白,catch到异常后,执行后保存好了,然后执行finally,然后返回保存的值,finally修改不了保存好的值