我写了下面的测试代码,尽管我很确定会发生什么:
static void Main(string[] args)
{
Console.WriteLine(Test().ToString());
Console.ReadKey(false);
}
static bool Test()
{
try
{
try
{
return true;
}
finally
{
throw new Exception();
}
}
catch (Exception)
{
return false;
}
}
果然,该程序向控制台写了“False”。我的问题是,最初返回的真实情况会发生什么?有没有办法获得这个值,如果可能的话,在catch块中,或者如果没有,可以在原始的finally块中获取?
只是为了澄清,这仅用于教育目的。我永远不会在实际程序中制作这样一个错综复杂的异常系统。
答案 0 :(得分:5)
不,不可能获得该值,因为毕竟只返回bool
。但是,您可以设置变量。
static bool Test()
{
bool returnValue;
try
{
try
{
return returnValue = true;
}
finally
{
throw new Exception();
}
}
catch (Exception)
{
Console.WriteLine("In the catch block, got {0}", returnValue);
return false;
}
}
但是,这很麻烦。出于教育目的,答案是否定的。