Как в 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);            
}
→ Ссылка