Start Coding

Topics

C# Exception Filters

Exception filters in C# provide a powerful way to refine exception handling. Introduced in C# 6.0, they allow developers to specify additional conditions for catching exceptions.

What are Exception Filters?

Exception filters are conditions that determine whether a catch block should handle an exception. They use the when keyword followed by a boolean expression.

Syntax and Usage

The basic syntax for using exception filters is:


try
{
    // Code that may throw an exception
}
catch (ExceptionType ex) when (condition)
{
    // Handle the exception if the condition is true
}
    

The condition can be any boolean expression, allowing for complex filtering logic.

Examples

1. Basic Exception Filter


try
{
    int result = 10 / int.Parse(Console.ReadLine());
}
catch (DivideByZeroException ex) when (DateTime.Now.DayOfWeek == DayOfWeek.Monday)
{
    Console.WriteLine("Cannot divide by zero on Mondays!");
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("Cannot divide by zero!");
}
    

In this example, the first catch block only executes if it's Monday. Otherwise, the second catch block handles the exception.

2. Filtering Based on Exception Properties


try
{
    // Some file operation
}
catch (IOException ex) when (ex.HResult == -2147024864)
{
    Console.WriteLine("The file is being used by another process.");
}
    

Here, we catch a specific IOException based on its HResult property.

Benefits of Exception Filters

  • More precise exception handling
  • Reduced need for nested try-catch blocks
  • Improved code readability
  • Ability to log or perform actions without catching the exception

Best Practices

  1. Keep filter conditions simple and fast to evaluate.
  2. Use exception filters to handle specific scenarios rather than general exception types.
  3. Combine exception filters with Custom Exceptions for more robust error handling.
  4. Consider using exception filters for logging without catching the exception.

Related Concepts

To fully understand and utilize exception filters, it's helpful to be familiar with:

Exception filters enhance C#'s exception handling capabilities, allowing for more granular and expressive error management in your applications.