Как в C# правильно обработать повторно выброшенное исключение?
Вот код:
class ExceptionsDemo
{
public static void Divide(int x, int y)
{
try
{
var z = x / y;
}
catch (DivideByZeroException ex)
{
throw new ArgumentException("y равен 0", ex);
}
}
public static void Execute(int x, int y)
{
try
{
Divide(x, y);
}
catch (Exception ex)
{
var inner = ex.InnerException;
Console.WriteLine(inner.Message);
}
}
}
Вызываю вот так:
static void Main(string[] args)
{
ExceptionsDemo.Divide(5, 0);
}
Ожидаю, что повторно выброшенное исключение поймается в Execute, но этого не происходит - программа вылетает, если запустить отладку. Если запустить без режима отладки, то выполняется, а в консоли пишет "Unhandled exception. System.ArgumentException: y равен 0". Почему оно unhandled, если я его ловлю?
Если изменить вызов вот так:
static void Main(string[] args)
{
try
{
ExceptionsDemo.Divide(5, 0);
}
catch (Exception ex)
{
Console.WriteLine("Catch в main");
}
}
тогда повторное исключение ловится в catch мейна.
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Как правильно написали в комментариях, вы не вызываете метод Execute, поэтому исключение не ловится. Если вызывать Execute вместо Divide, то должно пойматься:
static void Main(string[] args)
{
ExceptionsDemo.Execute(5, 0);
}