Por que re-lançar exceções?

Eu vi o seguinte código várias vezes:

try
{
    ... // some code
}
catch (Exception ex)
{
    ... // Do something
    throw new CustomException(ex);

    // or
    // throw;

    // or
    // throw ex;
}

Você pode por favor explicar o propósito de lançar uma exceção? Está seguindo um padrão / melhor prática no tratamento de exceções? (Eu li em algum lugar que é chamado de "Caller Informar" padrão?)

questionAnswers(13)

yourAnswerToTheQuestion