Но маловероятно, что вызывающая сторона захочет перехватить ArgumentException. Поймать FooException, вероятно, имеет больше смысла.

читал несколько других вопросов, касающихся практики обработки исключений в 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
    }
}

Ответы на вопрос(8)

Ваш ответ на вопрос