An exception is an event, which occurs during the execution of a program, that disrupts the program’s instructions

Exception handling in C# involves using the Exception class to handle and manage different types of exceptions that may occur during the execution of a program.

The Exception class is the base class for all exceptions in the .NET Framework.

Basics of Exception Handling in C#

In C#, exceptions are handled using the try-catch block. The try block is used to enclose the code that might throw an exception, and the catch block is used to handle the exception if it occurs.

try
{
    // Code that might throw an exception
}
catch (Exception ex)
{
    // Handle the exception
}

In this example, if an exception occurs within the try block, the catch block will catch the exception and allow you to handle it.

The Exception ex parameter in the catch block is used to access information about the exception, such as the error message and stack trace.

Handling Specific Exceptions

In addition to handling exceptions using the base Exception class, you can also handle specific types of exceptions.

This allows you to provide more specific error handling for different scenarios. For example:

try
{
    // Code that might throw an exception
}
catch (DivideByZeroException ex)
{
    // Handle DivideByZeroException
}
catch (FileNotFoundException ex)
{
    // Handle FileNotFoundException
}
catch (Exception ex)
{
    // Handle any other exceptions
}

In this example, the catch blocks are ordered from most specific to least specific. If a DivideByZeroException occurs, the first catch block will handle it.

If a FileNotFoundException occurs, the second catch block will handle it. If any other type of exception occurs, the last catch block will handle it.

Finally Block

The finally block is an optional block that can be used to specify code that will always execute, regardless of whether an exception occurs or not.

try
{
    // Code that might throw an exception
}
catch (Exception ex)
{
    // Handle the exception
}
finally
{
    // Code that always executes
}

In this example, the code in the finally block will execute regardless of whether an exception occurs or not. This can be useful for cleaning up resources or performing other necessary actions.

Throwing Exceptions

In addition to handling exceptions, you can also throw exceptions using the throw keyword. This allows you to manually generate and throw exceptions based on certain conditions.

if (someCondition)
{
    throw new Exception("An error occurred");
}

In this example, if the someCondition evaluates to true, an exception of type Exception will be thrown with the specified error message.

Example

The next example of exception handling uses the Exception class in the catch block

try
{
    // Code that may throw an exception
    int[] numbers = { 1, 2, 3 };
    Console.WriteLine(numbers[4]); //Notice how [4] doesn't exist in numbers
}
catch (Exception ex)
{
    // Code to handle the exception
    Console.WriteLine("An exception occurred: " + ex.Message);
}

In this example, we have a try block that contains the code that may throw an exception. Inside the try block, we have an array of integers numbers, and we’re trying to access an element at index 4, but it doesn’t exist.

If an exception occurs within the try block, it will be caught by the catch block. The catch block specifies the type of exception to catch, in this case, Exception.

The Exception class is the base class for all exceptions in C#, so it can catch any type of exception.

Inside the catch block, we can handle the exception as needed. In this example, we simply print a message that an exception occurred along with the exception message using ex.Message. You can customize the code inside the catch block to handle the exception in a way that makes sense.

Note that in a real-world scenario, it’s generally recommended to catch specific types of exceptions rather than catching the Exception base class.

References and further readings

Exception Class (System) – Microsoft.com

Exception Handling Best Practices – Stackify.com