Mastering C# Exceptions: A Comprehensive Guide
What are Exceptions?
Exceptions are unexpected events that occur during program execution, disrupting the normal flow of your code. For instance, attempting to divide a number by zero will trigger an exception. Understanding how to handle these exceptions is crucial for building robust and reliable applications.
The C# Exception Hierarchy
At the heart of C# exception handling lies a well-structured hierarchy. The base class, Exception, serves as the foundation for other exception classes. Two primary categories emerge from this base class: SystemException and ApplicationException.
Built-in Exceptions: SystemException
C#’s built-in exceptions, also known as SystemException exceptions, are derived from the SystemException class. This class handles system-related exceptions, including:
- StackOverflowException: Thrown when the execution stack exceeds its size, often caused by infinite loops.
- ArithmeticException: Covers errors in arithmetic, casting, or conversion, with subclasses like:
- DivideByZeroException: Triggered when dividing an integer by zero.
- NotFiniteNumberException: Occurs when a floating-point value is positive or negative infinity or NaN (Not-a-Number).
- OverFlowException: Thrown when the result of an operation exceeds the range.
- ValidationException: Raised when an input value is invalid, such as entering an integer value in a field expecting a DateTime value.
- ArgumentException: Occurs when providing an invalid argument in a method, like passing a mismatched data type.
A SystemException Example
Consider a scenario where we attempt to access an array element out of range, resulting in an IndexOutOfRangeException.
User-defined Exceptions: ApplicationException
In addition to built-in exceptions, C# allows you to create custom, application-level exceptions, known as ApplicationException exceptions. These are derived from the ApplicationException class. For example, let’s create an InvalidAgeException to restrict participant ages to 18 or less.
Error vs. Exception
It’s essential to distinguish between errors and exceptions. Errors represent conditions like compilation errors, syntax errors, or logical mistakes, which are often beyond the programmer’s control. Exceptions, on the other hand, can be caught and handled by the program. Now that we’ve explored exceptions, we’re ready to dive into external handling in the next tutorial.