Both approaches will catch all exceptions. There is no significant difference between your two code examples except that the first will generate a compiler warning because ex
is declared but not used.
But note that some exceptions are special and will be rethrown automatically.
ThreadAbortException
is a special exception that can be caught, but it will automatically be raised again at the end of the catch block.
http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx
As mentioned in the comments, it is usually a very bad idea to catch and ignore all exceptions. Usually you want to do one of the following instead:
- Catch and ignore a specific exception that you know is not fatal.
catch (SomeSpecificException) { // Ignore this exception. }
- Catch and log all exceptions.
catch (Exception e) { // Something unexpected went wrong. Log(e); // Maybe it is also necessary to terminate / restart the application. }
- Catch all exceptions, do some cleanup, then rethrow the exception.
catch { SomeCleanUp(); throw; }
Note that in the last case the exception is rethrown using throw;
and not throw ex;
.