Recipe7.2.Knowing When to Catch and Rethrow Exceptions


Recipe 7.2. Knowing When to Catch and Rethrow Exceptions

Problem

You want to establish when it is appropriate to catch and rethrow an exception.

Solution

It 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.

Discussion

Establishing 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.

Remember that throwing exceptions is expensive. Try not to needlessly throw and rethrow exceptions since this might bog down your application.




C# Cookbook
Secure Programming Cookbook for C and C++: Recipes for Cryptography, Authentication, Input Validation & More
ISBN: 0596003943
EAN: 2147483647
Year: 2004
Pages: 424

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net