C #: Передовые методы создания настраиваемых исключений

Я прочитал несколько других вопросов, касающихся методов обработки исключений C #, но, похоже, никто не спрашивает, что я ищу.

Если я реализую собственное исключение для определенного класса или набора классов. Должны ли все ошибки, относящиеся к этим классам, быть инкапсулированы в мое исключение с использованием внутреннего исключения, или я должен позволить им пропасть?

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

Исключение:

class FooException : Exception
{
    //...
}

Вариант 1: Foo заключает в себе все исключения:

class Foo
{
    DoSomething(int param)
    {
        try 
        {
             if (/*Something Bad*/)
             {  
                 //violates business logic etc... 
                 throw new FooException("Reason...");
             }
             //... 
             //something that might throw an exception
        }
        catch (FooException ex)
        {
             throw;
        }
        catch (Exception ex)
        {
             throw new FooException("Inner Exception", ex);
        }
    }
}

Вариант 2: Foo выдает определенные исключения FooExceptions, но позволяет другим исключениям не выполняться :

class Foo
{
    DoSomething(int param)
    {
        if  (/*Something Bad*/)
        {
             //violates business logic etc... 
             throw new FooException("Reason...");
        }
        //... 
        //something that might throw an exception and not caught
    }
}
47
задан 21 January 2011 в 16:59
поделиться