Возврат настраиваемого исключения

17

Я пытаюсь реализовать свой собственный класс Exception в C #. Для этого я создал класс CustomException, полученный из Exception.

class CustomException : Exception
{
    public CustomException()
        : base() { }

    public CustomException(string message)
        : base(message) { }

    public CustomException(string format, params object[] args)
        : base(string.Format(format, args)) { }

    public CustomException(string message, Exception innerException)
        : base(message, innerException) { }

    public CustomException(string format, Exception innerException, params object[] args)
        : base(string.Format(format, args), innerException) { }
}

Затем я использую его

static void Main(string[] args)
{
    try
    {
        var zero = 0;
        var s = 2 / zero;
    }
    catch (CustomException ex)
    {
        Console.Write("Exception");
        Console.ReadKey();
    }
}

Я ожидаю, что получу свое исключение, но все, что я получаю, является стандартным исключением DivideByZeroException. Как я могу поймать деление на нулевое исключение, используя мой класс CustomException? Спасибо.

    
задан JohnyMotorhead 13.04.2013 в 23:12
источник

2 ответа

25

Волшебное изменение типа исключения, созданного существующим кодом, невозможно.

Вам нужно throw вашего исключения, чтобы уловить его:

try 
{
   try
    {
        var zero = 0;
        var s = 2 / zero;
    }
    catch (DivideByZeroException ex)
    { 
        // catch and convert exception
        throw new CustomException("Divide by Zero!!!!");
    }
}
catch (CustomException ex)
{
    Console.Write("Exception");
    Console.ReadKey();
}
    
ответ дан Alexei Levenkov 13.04.2013 в 23:14
источник
16

Прежде всего, если вы хотите увидеть свое собственное исключение, вы должны throw его где-то в вашем коде:

public static int DivideBy(this int x, int y)
{
    if (y == 0)
    {
        throw new CustomException("divide by zero");
    }

   return x/y; 

}

, то

int a = 5;
int b = 0;
try
{
      a.DivideBy(b);
}
catch(CustomException)
{
//....
}
    
ответ дан Dmitry Martovoi 13.04.2013 в 23:16
источник