Последний блок C# не выполняется, когда исключение выдается из catch
Когда я положил SecondMain()
внутри попробуйте последний блок внутри secondMain()
выполняется. Но когда я помещаю это снаружи, это не выполняет. Почему не выполняется?
static void Main(string[] args)
{
try
{
SecondMain(args); //try putting
Console.WriteLine("try 1");
throw new Exception("Just fail me");
}
finally
{
Console.WriteLine("finally");
}
}
static void SecondMain(string[] args)
{
try
{
throw new StackruException();
}
catch (Exception)
{
Console.WriteLine("catch");
throw;
}
finally
{
Console.WriteLine("finally");
}
}
1 ответ
Я попробовал ваш код, и не имеет значения, вызывается ли метод SecondMain() снаружи или внутри блока try.
Программа всегда падает, потому что вы не обрабатываете исключения, и MainExceptionHandler из среды.Net должен позаботиться об этом. Он получает необработанное исключение и выходит из вашей программы.
Попробуйте это, и теперь я думаю, что ваш код ведет себя как ожидалось.
static void Main(string[] args)
{
try
{
SecondMain(args); //try putting
Console.WriteLine("try 1");
throw new Exception("Just fail me");
}
catch(Exception)
{
Console.WriteLine("Caught");
}
finally
{
Console.WriteLine("finally");
}
}
static void SecondMain(string[] args)
{
try
{
throw new StackruException();
}
catch (Exception)
{
Console.WriteLine("catch");
//throw;
}
finally
{
Console.WriteLine("finally");
}
}
Я надеюсь, что это ответ, который вы искали.