Often, we need to put some exception handling on catch blocks (e.g.,
to rollback a transaction) and re-throw the exception. There are two
ways of doing it. The wrong way:
try
{
// Some code that throws an exception
}
catch (Exception ex)
{
// some code that handles the exception
throw ex;
}
Why is this wrong? Because, when you examine the stack trace, the point of the exception will be the line of the “throw ex;
“, hiding the real error location. Instead of “throw ex;
“, which will throw a new exception and clear the stack trace, simply use "throw;
":
try
{
// Some code that throws an exception
}
catch (Exception ex)
{
// some code that handles the exception
throw;
}
If you don't specify the exception, the throw statement will simply
rethrow the very same exception the catch statement caught. This will
keep your stack trace intact, but still allows you to put code in your
catch blocks.