5.4. Handling Derived Exceptions Individually
Problem
You have an exception hierarchy that consists of a base exception class and multiple derived exception classes. At some point in your code, you want to handle only one or two of these derived exceptions in a specific manner. All other derived exceptions should be handled in a more generic manner. You need a clean way to target specific exceptions in an exception class hierarchy to be handled differently from the rest.
Solution
The exception handlers for C#
allow for multiple catch clauses to be
implemented. Each of these catch clauses can take
a single parameter—a type derived from the
Exception class. An exception handler that uses
multiple catch clauses is shown here:
try
{
int d = 0;
int z = 1/d;
}
catch(DivideByZeroException dbze)
{
Console.WriteLine("A divide by zero exception occurred. Error message == "
+ dbze.Message);
}
catch(OverflowException ofe)
{
Console.WriteLine("An Overflow occurred. Error message == " + ofe.Message);
}
catch(Exception e)
{
Console.WriteLine("Another type of error occurred. Error message == "
+ e.Message);
}This code produces the following output:
A divide by zero exception occurred. Error message == Attempted to divide by zero.
Discussion
Notice the exception types that each catch clause
handles in this try-catch block. These specific
exception types will be handled on an individual basis within their
own catch block. Suppose the
try block looked as follows:
try { int z2 = 9999999; checked{z2 *= 999999999;} ...