Я написал простую программу для проверки теории о том, что блок «finally» всегда будет выполняться, несмотря ни на что. Но то, что я вижу из приведенной ниже pgm, заключается в том, что управление, кажется, никогда не входит во внешний блок finaly.
Я пробовал использовать F5, а также Ctrl-F5 в Visual Studio, и результат тот же.
Кто-нибудь может объяснить, почему я вижу такое поведение?
Вывод в окне консоли:
внутренний улов
внутренний улов
внешний улов
необработанное исключение:
..и затем приложение вылетает
public class Program
{
static void Main()
{
try
{
try
{
string s = null;
s.ToString();
}
catch
{
Console.WriteLine("inner catch");
throw;
}
finally
{
Console.WriteLine("inner finally");
}
return;
}
catch
{
Console.WriteLine("outer catch");
throw;
}
finally
{
Console.WriteLine("outer finally");
}
}
}