110,533
社区成员
发帖
与我相关
我的任务
分享
//这里会等到整个getb方法执行完返回值后输出
Console.WriteLine(getb(1, 2));
static int getb(int a, int b)
{
try{
b = a + b;
//直接输出了这个没有异议吧?
Console.WriteLine(b);
//return会离开try,因此激活了finally,finally结束前不做return操作,但是return的数据已经堆好了
return b;
}
finally{
b = 3 * b;
//顺序执行就输出了
Console.WriteLine(b);
}
}
说到底如果你觉得输出有问题是因为你把return 放在了try里面,既然用try包裹输出就应该在try完成后再做return
正常来说应该这样写代码:
static int getb(int a, int b)
{
int c=0;
try{
c = a + b;
Console.WriteLine(c);
}
finally{
c = 3 * c;
Console.WriteLine(c);
}
return c;
}
这样就很清楚什么时候执行什么时候返回了。
static int getb(int a, int b)
{
try
{
b = a + b;
Console.WriteLine(b.ToString()+" in try");
Console.WriteLine(DateTime.Now);
return b;
}
finally
{
Thread.Sleep(1000);
Console.WriteLine(DateTime.Now);
b = 3 * b;
Console.WriteLine(b.ToString()+" in finally");
}
}
结果:
输出到 17:36:54时,暂停了1秒,才输出的55
官方解释说得清楚:当离开try block时才启动finally block