Recipe 7.2. Knowing When to Catch and Rethrow ExceptionsProblemYou want to establish when it is appropriate to catch and rethrow an exception. SolutionIt is appropriate if you have a section of code where you want to perform some action if an exception occurs, but not perform any actions to actually handle the exception. In order to get the exception so that you can perform the initial action on it, establish a catch block to catch the exception. Then once the action has been performed, rethrow the exception from the catch block in which the original exception was handled. Use the throw keyword, followed by a semicolon, to rethrow an exception: try { Console.WriteLine("In inner try"); int z2 = 9999999; checked{z2 *= 999999999;} } catch(DivideByZeroException dbze) { // Record the fact that the divide-by-zero exception occurred. EventLog.WriteEntry("MyApplication", dbze.Message, EventLogEntryType.Error); throw; } Here, you create an EventLog entry that records the occurrence of a divide-by-zero exception. Then the exception is propagated up the call stack by the throw statement. DiscussionEstablishing a catch block for an exception is essentially saying that you want to do something about that exceptional case. If you do not rethrow the exception, or create a new exception to wrap the original exception and throw it, the expectation is that you have handled the condition that caused the exception and that the program can continue normal operation. By choosing to rethrow the exception, you are indicating that there is still an issue to be dealt with and that you are counting on code farther up the stack to handle the condition. If you need to perform an action based on a thrown exception and need to allow the exception to continue after your code executes, then rethrowing is the mechanism to handle this. If both of those conditions are not met, don't rethrow the exception; just handle it or remove the catch block.
|