Вы можете перебросить исключение, не теряя стек вызовов, просто перебросьте как
catch(Exception e)
{
throw;
}
Зачем вам это нужно? Пример использования: Где-то в вашем приложенииу вас есть сторонний код, и вы оборачиваете его, и если он генерирует исключения, вы генерируете WrappingException.
Когда вы выполняете какой-то другой код, вы можете получить исключение либо от 3-го участника, либо от вашего собственного, поэтому вам может потребоваться:
try
{
//code that runs 3rd party
//your code, but it may throw Null ref or any other exception
}
catch( WrappingException)
{
throw;
}
catch( Exception e)
{
throw new MyAppLayer3Exception("there was exception...", e);
}
В этом случае вы не заключаете WrappingException в свое MyAppLayer3Exception.
Таким образом, на верхнем уровне вашего приложения вы можете перехватывать все исключения и, зная тип исключения, вы будете знать, откудаэто пришло!
Надеюсь, это поможет.