111,098
社区成员




//这里会等到整个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");
}
}
结果: