¿Por qué volver a lanzar excepciones?

He visto el siguiente código muchas veces:

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

    // or
    // throw;

    // or
    // throw ex;
}

¿Puede por favor explicar el propósito de volver a lanzar una excepción? ¿Está siguiendo un patrón / mejor práctica en el manejo de excepciones? (He leído en alguna parte que se llama patrón "Informe de llamadas")

Respuestas a la pregunta(13)

Su respuesta a la pregunta